• 締切済み

外部画像を読込んで個別にアクションを設定したい。

XMLを読込み、XML内に書かれたURL先の画像(複数枚)を取込んでサムネイル表示させています。参考書を見本にしてここまでは出来ました。 更に、読込んだ画像をクリックするとその画像に対する記事を別ウィンドウで開きたいのですが可能でしょうか? 具体的に言いますと、次の■■■部分を画像毎に設定することは可能でしょうか? on (release) { getURL("JavaScript:newWin(\"■■■\",\"sub\");"); } ●XMLの内容が下記であった場合 1.jpgをクリックすると1.htmlが開き、2.jpgをクリックすると2.htmlが開くといった感じです。 <pho>  <pic>   <fle>1.jpg</fle>   <toU>1.html</toU>  </pic>  <pic>   <fle>2.jpg</fle>   <toU>2.html</toU>  </pic> </pho> ■ActionScriptの内容です。(全部書くと長くなってしまうので一部省略してます) myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("cpnimgs.xml"); v_xset = myBase._y; myXML.onLoad = function (loaded) { if (loaded) { v_rNode = myXML.firstChild; v_num = v_rNode.childNodes.length; v_cPhoto = v_rNode.firstChild; for (i=0; i < v_num; i++) { v_loadURL = v_cPhoto.childNodes[0].firstChild; v_cPhoto = v_cPhoto.nextSibling; f_makeimg (i, v_loadURL); } } else { trace ("error occured"); } }; function f_makeimg (num, path) { myBase.myLoad.duplicateMovieClip ("myLoad"+num, num+1); v_name = eval("myBase.myLoad"+num); z_Num = Math.floor(num / 4) ; v_name._x = (num - (z_Num *4)) * 123; v_name._y = z_Num * 175; v_name.loadMovie (path); myBase.myLoad._visible = false; }

みんなの回答

  • perse
  • ベストアンサー率74% (113/152)
回答No.3

myBase.myLoad"+num の中にボタンがあって myBase.myLoad"+num にloadMovieで外部の画像を読み込んでいるのなら myBase.myLoad"+num内が置き換わるのでボタンは押せなくなります。 ためしに_rootにペンツール等で適当な文字でもかいて _root.loadMovie("1.jpg")で_rootに画像を読み込むと 今まで書いてあった文字が画像に置き換わります。 でもまぁ押せるなら問題なしですね。

kanames
質問者

お礼

perseさんの方法を試してみましたが、現状の複製方法では、やはりうまくいきませんでした。(v_name.loadMovie (path);をコメント化すればトレースはできましたが、コメント化を解除すると今度は画像が読込めなくなりました)perse産が仰るようにmyBase.myLoad"+numの中にMCを作るようなコードであればうまくいくのかもしれません。 参考書によるとMCの中にMCを作って、それを複製すれば動作するようなことが書いてありました。現状のコードで問題ないかもしれません。このままのコードでいこうと思います。 「ためしでペンツールで・・・」の方法だと、今回のコードで言えばmyBaseに読込むようなことではないでしょうか?それでは無理なことは承知しています。 ん~~なんだか私の説明不足で誤解されている気が・・・。myBaseはMCです。

  • perse
  • ベストアンサー率74% (113/152)
回答No.2

#1です。 動かなかったら応用も何もないですね。 #1の例ですが階層は以下の様に考えてました。 _root --myBase ----myLoad1 …(1) ----myLoad2 …(2) ----myLoad3 …(3) (1)、(2)、(3)は元は同じMCです。インスタンス名が違います。 その元のMCにボタンが配置されています。 質問の方ですが、テストとして >myBase.myLoad._visible = false; の下にでも v_name.str=num //『myBase.myLoad"+num』に変数strを作成し値を代入する処理。 を、 myBase.myLoadの中のボタンアクションに on(press){ trace(this.str)//さっき作った変数をトレースする処理 } を記述し >v_name.loadMovie (path); をコメントにすれば今度こそできるはずですのでお試しください。 無事トレースされたらf_makeimgの引数をひとつ増やして リンク先を渡してやればいいと思います。 v_name.loadMovie (path)をコメントにしたのは myBase.myLoad"+num の中にjpgを読み込むと 中身が置き換わってしまい、ボタンが押せなくなるからです。 それを防ぐにはjpg読み込み用のMCを myBase.myLoad"+numの中に作成する必要があるはずなのですが、 自己解決されたコードでボタン押せました?? なんか勘違いしてたらごめんなさい。 MC、ボタンの配置は冒頭のように考えています。

kanames
質問者

補足

度々の回答ありがとう御座います。 申し訳ありません!!!! 実は、今さっき気が付いたのですが出力ウィンドウがオカシイ・・・?と。 調べたところ、いつの間にかフィルタレベルが「なし」になってました。とんだ間抜けなことをしていました。これじゃぁトレースされてても表示されないですよね。(TT;)申し訳ありません。 #1の時点で問題ないかもしれません。 まだ試してませんが、明日にでも試してみます。 勝手ですが今日はもう眠さ限界なので寝かせて頂きます。明日にまた報告します。 >myBase.myLoad"+numの中に作成する必要があるはずなのですが、自己解決されたコードでボタン押せました?? はい、押せています。 v_nameをトレースすると以下のようになるので、myBase.myLoad"+num の中にjpgを読込んでいるようです。本来は押せないはずなのでしょうか? _level0.myBase.myLoad0 _level0.myBase.myLoad1 _level0.myBase.myLoad2

  • perse
  • ベストアンサー率74% (113/152)
回答No.1

動作確認していない例ですが for(var i=1;i<=3;i++){ v_name = eval("myBase.myLoad"+i); v_name.str = i+"番目" } //myBase.myLoadの中のボタンのアクションに on(press){ trace(this.str) } と書く。 myBase.myLoad1のボタンを押すと 1番目 myBase.myLoad2のボタンを押すと 2番目 myBase.myLoad3のボタンを押すと 3番目 とトレースされます。 これの応用でできると思います。

kanames
質問者

補足

回答ありがとう御座います。 例を参考に記述してみましたが、うまくいきませんでした。 「応用する」ということで色々試してみましたが、出力ウィンドウに1.htmlなどのリンク先をトレースすることが出来ませんでした。 画像をクリックしても、strを参照できないようです。 自分でもアレコレ悩んだ挙句、強引?なコードではありますが自己解決しました。 myBase.myLoadの中のボタンアクションを次のようにしました。一応これで「1.jpg」=「1.html」など各画像に対応したリンク先にジャンプできます。(別ウィンドウ表示はこれからです) on (press) { LdName = new String(_name); NaNber = LdName.length; OpnURL = LdName.slice(6, NaNber); OpnURL++; getURL(OpnURL+".html"); } ゴリ押しコード?でスマートじゃないと思いますがこれしか浮かんできませんでした。 もっと単純でスマートなコード例があれば、よろしくお願いします。または「上記のコードでは問題が発生する!」というご意見があればお願いします。 2、3日何も回答がなければ締め切りたいと思います。