- ベストアンサー
XMLから画像URLを呼び込むソースの仕組みと解説
- このソースではXMLから画像URLを呼び込む仕組みについて解説します。
- まず、XMLデータをロードし、ノードのトータル数を取得します。
- カウント用変数を使って、画像を順番に表示し、クリックするとリンク先に移動します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
XML は階層を構築して記述できる言語で、XML の階層構造によってスクリプトも変わってきます。 スクリプトから察するに、想定している XML は <Menu> <Item jpegURL="image1.jpg" linkURL="http://○○○.jp">1</Item> <Item jpegURL="image2.jpg" linkURL="http://△△△.jp">2</Item> <Item jpegURL="image3.jpg" linkURL="http://□□□.jp">3</Item> </Menu> ↑タグの名前はさておき、このような構造ではないでしょうか? ActionScript 2.0 までの XML は、XML オブジェクトの中に様々な変数が作られ、取得した値は前後のノードの情報を参照するための手掛かりなどと一緒に記録されます。 先述の XML の構造ですと、読み込みを担当した myXML には、<Menu> という子ノードが1つあります。 子ノードの情報は childNodes という名前の配列変数で記録されます。 この場合の this は myXML のことですから、this.childNodes[0] は、myXML が持っている最初の子(配列変数は0番から始まるので、0番目の子)との意味で、最も外側にある <Menu> ノードを表します。 myXML が持つノードは <Menu> ノード1つだけで、childNodes も 0 番までしかありません。 肝心の画像やリンク先などの情報は全て、<Menu> ノードの子になっています。 this.childNodes[0] が <Menu> ノードのことですから、その階層の childNodes[ 番号 ] で、<Menu> ノードが持っているそれぞれの子ノードの情報を見ることができます。 こちらも同様に、各ノードの情報が配列変数で記録されています。0番に1、1番に2、2番に3の情報が入っています。 この配列変数の 0 ~ 2 という管理番号を変数 cnt で管理し、画像や URL の情報を取り出すわけです。 ***** その、変数 cnt ですが。 上記の例ですと、<Menu> の子ノードは3つですから、その情報を持つ配列変数 this.childNodes[0].childNodes も要素が3つ、番号にして 0 ~ 2 まであります。 従って、cnt が取りうる値も 0 ~ 2 となります。 childNodes は配列変数なので、length というプロパティを見ると配列変数の中に要素がいくつあるのかが分かります。今回の例では3つですから、childNodes.length は 3 です。 ご提示のスクリプトでは、この length の値を変数 total に記録しています。 cnt の最大値は 2 、これはつまり total - 1 (= length - 1 )です。 cnt が total - 1 未満の時は次のノードがあるので cnt を +1 して次のノードの情報を見ることができますが、cnt が 2 の時は次のノードがありません。 そこで、if 文を使って 2 の時は 0 に戻すことで、0 ~ 2 の間に収まるようにしているのです。 配列変数は管理番号が 0 から始まり、length には管理番号の最大値 + 1 が記録されるという特徴があります。 この点を利用して、剰余を使って if 文を使わずに計算する方法もあります。 total(=length )の値である 3 の剰余は、cnt の値が何であれ、必ず 0 ~ 2 のいずれかになります。 つまり、cnt を +1 した後で total の剰余を求めたものを cnt の新しい値にしておくと、if 文で判断しなくても 0 ~ 2 のカウントアップ( 2 の次は 0 に戻る)になります。 スクリプトにしますと、 _root.cnt = ( ++_root.cnt ) % _root.total; このようになります。剰余は % 演算子で求められます。 後ろから求める場合も、同様に剰余を利用することができます。 cnt が 0 の時に -1 すると剰余が負の数になってしまいますから、-1 したあとで total の値を加算して正の数に戻し、改めて total の剰余を求めます。これで、2 ~ 0 のカウントダウン( 0 の次は 2 )になります。 スクリプトは _root.cnt = ( ( --_root.cnt ) + _root.total ) % _root.total; このようになります。