srcの使用方法について

このQ&Aのポイント
  • srcの使用方法についての意味や構文について調べましたが、詳細は掲載されていませんでした。
  • 配列に格納された名前を取り出すために、array[i].srcという記法が使われているようですが、配列以外の変数ではこのような参照は可能なのでしょうか?
  • srcの使用方法について疑問があります。配列以外の変数でsrcを利用して値の名前を参照することはできるのでしょうか?
回答を見る
  • ベストアンサー

srcの使用方法について

var array:Array = new Array(); for (var i = 0; i<images.length; i++) { array.push({src:images[i].firstChild.nodeValue}); } mcLoader.loadClip(array[i].src, thisMC); srcの使用方法について,どのような意味なんでしょうか? 構文などを調べてみても掲載させていませんでした. array[i].srcでは,配列に格納された名前を取ってきているようですが,いまいち理解できません.配列以外の変数では変数の値の名前をsrcを利用して参照することは可能なのでしょうか?

  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

例えば  array = new Array(); とすると、配列変数 array が用意されます。 この時点では、array は空っぽです。 push は、配列変数の最後に要素を追加する命令(メソッドといいます)です。 先ほどのスクリプトの後に  array.push( "ABC" );  array.push( "あいうえお" ); とすると、array に要素が2つ追加されます。 中身は、  array[ 0 ] → ABC  array[ 1 ] → あいうえお このようになります。 配列変数は、同じ名前で管理番号だけが違う、複数の変数が集まったものです。 配列変数では、1つ1つの変数(要素)に更に個別の要素を追加し、何種類もの情報を効率よく管理できるようになっています。 例えば  array[ 0 ] = { x : 100 , y : 200 }; とすると、array[ 0 ] の中に更に x と y という名前の仕切りができて、  array[ 0 ].x → 100  array[ 0 ].y → 200 このように、同じ array[ 0 ] という名前の変数で2種類の情報を同時に管理できます。 先の push と合わせると、  array.push( { x : 100 , y : 200 } ); という書き方になります。 仕切りの名前は、ActionScript の文法に則ってさえいれば、好きな名前を付けて構いません。 ご質問文の例ですと、配列変数 array に含まれるそれぞれの変数の中に、更に src という名前の仕切りが作られていることになります。 例えば、画像ファイルの名前が”sample1.jpg””photo.jpg”だとすると、  array[ 0 ].src → sample.jpg  array[ 1 ].src → photo.jpg といった具合に格納されていきます。 ” src ”は、HTML ではファイル名や画像等のURLを指定するキーワードとして有名です。 しかし今回の件に関して言いますと、ActionScript で何か決まった役割をするものとして定義されているキーワードや識別子ではありません。 このスクリプトでの src とは、スクリプトの作成者が勝手に付けた名前の1つです。ヘルプや解説書で説明されていないのは当たり前なのです。 おそらく、XMLで記述された画像ファイルのリストを解析した後、ファイル名だけを配列に格納して、for ループ等を利用して複数の画像を一気に読み込めるようにするための処理だと思います。 なお、配列変数で管理したい情報が、画像のファイル名1種類だけなら、  for( i = 0 ; i < images.length ; i++ )  {   array.push( images[ i ].firstChild.nodeValue );  } (↑各行頭に全角のスペースが入っています。コピーして利用する際は、全て半角のスペースかタブに置き換えてください) と、配列変数に含まれるそれぞれの変数内に仕切りを作らず、直接格納することもできます。 この場合、できた配列を元に画像を読み込む時は  mcLoader.loadClip( array[ i ] , thisMC ); という書き方に変わりますので、ご注意ください。

boo3-poo3
質問者

お礼

さっそくの本当にお返事ありがとうございます.よくわかりました.てっきりsrcという言葉が予約語であると思っていたので,大変助かりました.また機会があればよろしくお願いいたします.本当にありがとうございました.

関連するQ&A

  • FLASHでCSVを配列で読込後、読み込んだ配列を関数の外で使いたい。

    FLASHでCSVを配列で読込後、読み込んだ配列を関数の外で使いたい。 下記のスクリプトでCSVから配列を取り込みましたが、 関数の外で、「csvRows」変数の中身を見る方法が分かりません。。 var csvLoader = new LoadVars(); var theFileObj = new LoadVars(); var theFile = csvLoader.sendAndLoad("test.csv",theFileObj,GET ); var csvRows = new Array(); theFileObj.onData = function(src) { var theFileArray = src.split("\r\n").join("\n").split("\n"); var theFieldNames = theFileArray[0].split(","); var numberOfFields = theFieldNames.length; for(var j=0; j<numberOfFields; j++){ theFieldNames[j] = removeQuotes(theFieldNames[j]); } for(var i=0; i<theFileArray.length; i++){ var tempArray = theFileArray[i].split(","); csvRows.push(tempArray); } } function removeQuotes(theString){ if (theString.charAt(0) == '"' || theString.charAt(0) == "'") { return theString.substr(1, theString.length - 2); }else { return theString; } }

    • ベストアンサー
    • Flash
  • 配列をfunctionに渡す方法

    画像プレロードのjQueryを書いているのですが、うまく動いてくれません。 最後の行の、preloadImg(preloadImgList);の箇所での渡し方が失敗しているのですが、 変数に入れた配列を、関数に渡すことはできないでしょうか。 preloadImg("a","b","c")というかたちにして、直接引数の部分を記述すると動作するのですが、配列の格納された変数にすると、1つの文字列として渡されるようなのです。 ====================================== function preloadImg(){ for(var i = 0; i<arguments.length; i++){ $("<img>").attr("src", arguments[i]); } } $('a.modal').each(function(){ preloadImgList.push($(this).attr('href')); }); preloadImg(preloadImgList); ======================================

  • 関数内での繰り返し処理の結果を配列で受け取りたい

    関数内でfor文で繰り返し処理を行い、 結果を配列として返すような関数を書きたいと思っています。 function hoge(){ var a = [1,2,3,4]; for (var i=0; i < a.length; i++){ a1 = "a" + i; var arr = new Array(); arr.push(a1); } return arr; } しかし、以下のように 関数hogeの結果を変数bで受け取ってみると、 配列の最後のデータしか表示されません。 var b = hoge(); alert(b); //a3のみが表示される a0, a1, a2, a3と表示されるようにするには、 どうしたらよいでしょうか。

  • flashでPHPファイル(実際は該当するxmlを呼ぶ)を読み込む方法について

    FLASH(AS2.0)でPHPファイル(実際は該当するxmlを呼ぶ)を読み込むようにするにはどのようにしたらいいのですか? 現状では、ローカルのxmlファイルを読み込むように、 下記のように書いてあります。 var objXML:XML = new XML(); objXML.ignoreWhite = true; objXML.onLoad = function(success:Boolean):Void { if(success) { loadXML(this); } } var menuArray:Array = new Array(); // function loadXML(objXML:XML):Void { var dataNode:XMLNode = objXML.firstChild; var menuNodes:Array = dataNode.childNodes; for(var i:Number = 1; i <= menuNodes.length; i++) { var menuNode:XMLNode = menuNodes[i-1].childNodes; var Name:String = menuNode[0].firstChild.nodeValue; menuArray[i] = { title:Name}; } myVars(menuArray); } objXML.load("sample.xml"); この状態から、外部<http://aaaa/sample.php>URLに アクセスして、PHPファイルを読み込むにはどのようにしたら よいのか全くわかりません。 objXML.load("sample.xml"); 上記の()の中に直接URLを挿入すると、 ローカルでは確認できるのですが、 ファイルをアップすると、まったく読み込めてはいません。 ActionScriptは全くわからないので、ご教授よろしくお願いいたします。

  • var x:Number = 0 ?

    劇的に初心者の質問です! var x:Number = 0 の:の意味はなんですか?? x:Numberという変数を宣言している。。わけじゃないですよね? ちなみに var node:Array = fXML.firstChild.childNodes[i]; だと、nodeという配列を宣言してる、で間違いないですか? この:もよくわからず。。 ほんとーにわからなくてすみません。 教えて頂けるとうれしいです わからなすぎて、質問が意味不明でしたらご指摘ください!

    • ベストアンサー
    • Flash
  • 二次元配列に値をセットしたいんですが

    ASP(html)での変数をJavaScriptに渡して 二次元配列を作成したいのですが、どうもうまくいきません。 どなたか、ご教授願います。 サンプル 変数:strFact = "'工場1', 1000, 20/'工場2', 500, 90/'工場3', 2000, 100/'工場4', 900, 10" -------------------JavaScript strFact_WK = <%=strFact %>  ※1 var test = new Array(); var rows = strFact_WK.split("/"); for( var i in rows) { test.push(new Array()); var cols = rows[i].split(","); for( var j in cols) { test[i].push(cols[j]); } } ---------------------- 当然ですが、 ※1の所で strFact_wk = "'工場1', 1000, 20/'工場2', 500, 90/'工場3', 2000, 100/'工場4', 900, 10" とすると作成されます。

  • 多次元配列とfor文について

    javascriptの配列について質問です。 例えば: var arrXXX = new Array(); function samplefunc{ //3次元配列の種類の作成 for (m = 0; m < aaa.length ; m++) { //連想配列作成 arrXXX .push(aaa[m]); } for (j = 0; j < bbb.length; j++) { for (i = 0; i < ccc.length; i++) { arrXXX[aaa[j]] = new Array(ccc.length); arrXXX[aaa[j]][i] = new Array(ccc.length); for (k = 0; k < ddd.length; k++) { arrXXX[aaa[j]][i][k] = eee;     ここでは配列を適切に使える・・・ } } } ここでarrXXXを使いたいが、3次元配列でなくなっている?!  arrXXX[~][0][0]はnullまたはオブジェクトではありません・・・がでます。 } 結局、for文を完全にでてしまうと、せっかくつくった配列がダメになってしまいます。どうすればfor文外で配列を使用できるのか教えてください!

  • 配列について、その要素を並べ替えて得られる配列を重複することなく全て得たいです。

    要素数が5つなら5!で120通り、nであればn!通りの配列をすべて得たい、といった具合です。 自分で組んでみたところ、再帰呼び出しを多用しているせいか要素を8つにした時点でFirefoxだと「このページのスクリプトは処理に時間がかかっているか応答しなくなっています。…」、IEでも似たような警告文が表示されてしまいます。 コードは以下に示すとおりです。 そこでお聞きしたいのは、  1.「処理に時間が~云々」などの表示をさせずに処理を   続けさせるにはどのように書いたらいいか  2.もっと短くスマートなコードで全走査できないか の2つです。 1.についてはユーザサイドでなく開発者サイドで、かつalertを使う以外の方法で、警告文を出させないで処理を続けさせるためにはコードをどのようにしたらよいでしょうか。 2.に関しては、私が書いたコードは正直わかりにくいと思いますので、もっとシンプルに全走査できるアルゴリズムがあったら教えてほしいです。 どうかよろしくお願いします。 <html> <body> <script type="text/javascript"> <!-- //Arrayオブジェクトに自身をコピーした配列を返すclone()メソッド追加 Array.prototype.clone = function(){ // 自分自身が配列かをチェック if(this[0].constructor == Array ){ var ar, n; //新しい配列を用意する ar = new Array(this.length); for(var n=0;n<ar.length;n++){ //再起呼び出しで配列の中身をコピー ar[n] = this[n].clone(); } //作成した配列を返す return ar; } return Array.apply(null,this); } //★要素を並べ替える前の配列の宣言 var ar = new Array("1","2","3","4","5","6","7","8"); //並べ替え後の配列を格納する配列宣言 var arranged_ar = new Array(); function arArrange(){ //引数は(呼び出した節の、並び替える前の配列内での順番,すでに取り出した節の配列,兄弟の配列) function createBranch(parentCounter,parentNodes,sameDepthBranches){ var branches = new Array(); //呼び出した節の子ノード格納用の配列宣言 branches = sameDepthBranches.clone(); //呼び出した節の兄弟をコピー branches.splice(parentCounter,1) //呼び出した節を除いて子ノードの配列作成完了 var pushed_ar = new Array(); //この節以前に登場した節を格納する(最終的に並べ替え終わった配列になる)配列宣言 pushed_ar = parentNodes.clone(); //呼び出し元のpushed_arをコピー for(var i=0;i<branches.length;i++){ pushed_ar.push(branches[i]); //pushed_arに子ノードを1つ追加 //走査が葉ノードに達したときの処理 if(pushed_ar.length == ar.length){ var length = arranged_ar.length; arranged_ar[length] = new Array(); for(var j=0;j<pushed_ar.length;j++){ arranged_ar[length].push(pushed_ar[j]); //arranged_arに並び替え後の配列を格納 } //走査がまだ葉ノードに達していない場合の処理 }else{ createBranch(i,pushed_ar,branches); //自身を再帰呼び出しすることで葉ノードに達するまでループ } //子ノード以下の走査が終わった場合の処理 pushed_ar.splice(pushed_ar.length-1,1); //追加した子ノードを削除して次の子ノード追加へ } return; } //↑で宣言したcreateBranch関数の呼び出し for(i=0;i<ar.length;i++){ var tempAr = new Array(); tempAr.push(ar[i]); createBranch(i,tempAr,ar); } //結果をresultに格納 var result = ""; for(var i=0;i<arranged_ar.length;i++){ result += i+1 + ": "; for(var j=0;j<arranged_ar[i].length;j++){ result += arranged_ar[i][j] + ","; } result += "<br>"; } //結果を画面に表示 document.getElementById("result").innerHTML = result; return; } --> </script> <input type="button" value="全並べ替えパターン走査" onclick="arArrange();"> <p id="result">ここに結果表示</p> </body> </html>

  • 外部XMLからFlashに読み込んだ画像にリンクをつける方法

    初めまして。 この度初めて外部XMLをFlashに読み込むコンテンツを制作しており、最後の段階でハマっておりますため、皆様のお力をお借りできればと思い投稿させていただきました。 ちなみに制作環境はMac OS10.3、flashはCS3です。 よくあるパターンのflashによる横スクロールメニュー(画像がマウス操作で左右に流れるもの)を作成しておりますが、表示される10枚の画像をflash内ではなく、外部imagesフォルダに置いておき、XMLにてflash内に作成されたムービークリップに読み込み表示させるコンテンツで、表示されたそれぞれの画像に、やはりXML内に記述されたそれぞれ別のURLを指定して、クリックでジャンプさせようとしています。 横スクロールに関しては問題なく表示できましたが、問題はリンクです。traceでは10個のURLが戻ってくるのですが、実際に各画像をクリックしてみると、全ての画像が10番目のリンク先となってしまっています。 ネットでも色々調べてみたのですが、getURL(this.変数)ではなくgetURL(this._parent.変数)にする等試してみましたがうまくいきません。 下記にActionScriptとXMLファイルの内容を記載致しますので、ご参考の上、ご回答いただけましたらありがたく思います。 ~以下1フレーム目のフレームスクリプト~ var obj_array:Array = new Array(); var center:Number = Stage.width/2; var menu_num:Number = 10; var maxlength:Number = 120*menu_num; var friction:Number = -0.03; System.useCodepage = true; var obj_xml:XML = new XML(); obj_xml.onLoad = start_me; obj_xml.ignoreWhite = true; obj_xml.load("scrollslide.xml"); function start_me(success:Boolean):Void { if (success == true) { for (var i = 1; i<=menu_num; i++) { var menu_str:String = "menu"+i; _root.attachMovie("menu", menu_str, i); obj_array[i] = eval(menu_str); obj_array[i].num = i; obj_array[i]._x = 120*(i-1); obj_array[i]._y = 30; obj_array[i]._alpha = 70; var jpg_str:String = obj_xml.firstChild.childNodes[i-1].firstChild.firstChild; obj_array[i].jpg_mc.loadMovie(jpg_str); var jumpURL:String = obj_xml.firstChild.childNodes[i-1].lastChild.firstChild.nodeValue; jump = jumpURL; trace(jump); obj_array[i].onEnterFrame = scrollphoto_me; obj_array[i].onPress = press_me; obj_array[i].onRollOver = roll_me; obj_array[i].onRollOut = rollout_me; } } else { seltext = "xml read error"; } } function scrollphoto_me():Void { var speed:Number = (_root._xmouse-center)*friction; var vx:Number = this._x+speed; if (vx<=-120) { vx += maxlength; vx = Math.round(vx); } else if (vx>=Stage.width-5) { vx -= maxlength; } vx1 = Math.round(vx); this._x = vx1; updateAfterEvent(); } function press_me():Void { getURL(this.jump); } function roll_me():Void { this._alpha = 100; } function rollout_me():Void { this._alpha = 70; } stop(); ~以下XMLファイルの記述~ <?xml version="1.0" encoding="Shift_JIS"?> <jpeg> <jumpURL> <jpegURL>images/fla/image1.jpg</jpegURL> <URL>http://www.yahoo.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image2.jpg</jpegURL> <URL>http://www.exnos.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image3.jpg</jpegURL> <URL>http://www.sony.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image4.jpg</jpegURL> <URL>http://www.toyota.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image5.jpg</jpegURL> <URL>http://www.nissan.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image6.jpg</jpegURL> <URL>http://www.honda.co.jp</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image7.jpg</jpegURL> <URL>http://www.mafdamino.com</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image8.jpg</jpegURL> <URL>http://www.nakata.net</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image9.jpg</jpegURL> <URL>http://www.nifty.com</URL> </jumpURL> <jumpURL> <jpegURL>images/fla/image10.jpg</jpegURL> <URL>http://www.adobe.com</URL> </jumpURL> </jpeg> 以上、よろしくお願致します。

    • ベストアンサー
    • Flash
  • ActionScriptで配列をクリアする方法を教えてください。

    ActionScriptで、オブジェクトを格納した配列をクリアする正しい方法を教えてください。 具体的には、 ・new Array() で配列を生成する。 ・new Object() で生成したオブジェクトを配列に格納する。 ・配列の中身を処理したあと、配列を一度クリアする。 ・配列に別のオブジェクトを格納する。 ような処理をしたいのですが、メモリリークを起こさずに配列をクリアするにはどうしたらいいでしょうか? 例えば、イメージはこんな感じです。(意味のないコードですが) // 配列の生成 var arr = new Array(); // 配列にオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i; } // 配列のクリア arr.length = 0; // クリアした配列に別のオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i * 2; } 上記のコードで、arr.length = 0; で配列をクリアしていますが、これで配列に格納されたオブジェクトが確保したメモリがすべて解放されるでしょうか? あるいは、配列の内容がなくなるまで pop() 等で取り出す等の処理をする必要があるでしょうか? 以上よろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう