- ベストアンサー
【AS3.0】画像をクリックして外部複数ファイルの読み出しと削除
- AS3.0初心者です。外部フォルダの複数イメージファイルを表示
- b_btnをクリックした時に、a_btnをクリックした時に出てきた画像を削除して、新たに画像を表示
- 最終的にはXMLからファイルを読み出して、クリックすると音データが再生
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
shotakaさん、 (1)表示させたイメージファイルをクリックして音を出す → 音がないので、検証してないですが、以下の例は、イメージをクリックすると、配列で定義した、サイトにリンクされる例です。キーは、イメージをクリックした際に、そのイメージが保有してる番号を取得できるかどうかです。それさえ取得できれば、外部サイトへのリンクであろうと、音であろうと、自由に出来るはずです。 //ここから var max:uint=4;//400×300を、120×90に縮小して、4枚読み込むケース //音の変わりに、著名サイトのURLを使って、配列を作っておき、 var url:Array=["http://yahoo.co.jp","http://google.com/","http://adobe.com/","http://microsoft.com/"]; function Display(n:uint) {//カスタム関数化 for (var i:uint=0; i<max; i++) { var mc:MovieClip=new MovieClip();//loaderを包む、dyamic クラスのMovieClipを生成しておく addChild(mc); mc.id=i;//iをmcに動的に追加したプロパティであるidに、保存しておき、mc がクリックされた時に、このidを使う mc.buttonMode=true; mc.mouseChildren=false;//包まれたloaderが、マウスに反応しないようじしておく if (i<2) {//横2枚、縦2枚の適当な位置に、mcを配置する mc.x=67+173*i;//数値は、ステージサイズに応じて、適当に決める mc.y=53; } else { mc.x=67+173*(i-2); mc.y=180; } var loader:Loader=new Loader(); mc.addChild(loader);//mcで、loaderを包む loader.contentLoaderInfo.addEventListener(Event.INIT,xInit,false,0,true);//縮小してるので、記載、なければ、不要 loader.load(new URLRequest("../../fotos"+n+"/"+i+".jpg"));//引数nで、フォルダー名を指定する mc.addEventListener(MouseEvent.CLICK,mClick,false,0,true);//mcがクリックされたら、 } } function xInit(e:Event):void {//原寸400×300を120×90に縮小してるので、縮小がなければ、不要 e.target.content.scaleX=0.3; e.target.content.scaleY=0.3; } function mClick(e:MouseEvent):void { trace(e.target.id);//クリックされたmcのiが復元される var req:URLRequest=new URLRequest(url[e.target.id]);//mc.id番目の配列を採取し、 navigateToURL(req,"_blank");//リンク } a_btn.addEventListener(MouseEvent.CLICK,aClick,false,0,true); b_btn.addEventListener(MouseEvent.CLICK,bClick,false,0,true); function aClick(e:MouseEvent):void { Display(0);//fotos0の0を引数に、カスタム関数を呼び出す } function bClick(e:MouseEvent):void { Display(1);//fotos1の1を引数に、カスタム関数を呼び出す } //ここまで (2)読みこむファイルが増えていくので更新を楽にするために、外部XMLからよみこみ。 → なんとも言えないです。理由は、XMLで何を定義されようとしてるのか分からないからです。ファイルが、単に増えるだけなら、フォルダー0、フォルダー1、フォルダー2・・・と増やして、それに見合う、ボタンを増やせばいい訳ですから、XMLで出来ると思いますし、これだけなら、XML使わずに、外部テキストで、数だけ、指定してやれば、事足りうような気もします。 やはり、how toの前に、whatを決めることが、肝要ではないでしょうか。
その他の回答 (1)
- joy_28
- ベストアンサー率84% (45/53)
shotakaさん、 こういう時は、複数JPGを並べて表示するカスタム関数を、引数を、フォルダー名として、作成し、ボタンで、切り替えると楽です。 //ここから var max:uint=4;//400×300を、120×90に縮小して、4枚読み込むケース function Display(n:uint) {//カスタム関数化 for (var i:uint=0; i<max; i++) { var loader:Loader=new Loader(); loader.contentLoaderInfo.addEventListener(Event.INIT,xInit,false,0,true);//縮小してるので、記載、なければ、不要 loader.load(new URLRequest("../../fotos"+n+"/"+i+".jpg"));//引数nで、フォルダー名を指定する if (i<2) {//横2枚、縦2枚の適当な位置づけ loader.x=67+173*i;//数値は、ステージサイズに応じて、適当に決める loader.y=53; } else { loader.x=67+173*(i-2); loader.y=180; } addChild(loader); } } function xInit(e:Event):void {//原寸400×300を120×90に縮小してるので、縮小がなければ、不要 e.target.content.scaleX=0.3; e.target.content.scaleY=0.3; } a_btn.addEventListener(MouseEvent.CLICK,aClick,false,0,true); b_btn.addEventListener(MouseEvent.CLICK,bClick,false,0,true); function aClick(e:MouseEvent):void { Display(0);//fotos0の0を引数に、カスタム関数を呼び出す } function bClick(e:MouseEvent):void { Display(1);//fotos1の1を引数に、カスタム関数を呼び出す } //ここまで
お礼
joy_28さま ありがとうございます。非常によくわかりました。 実際に利用させていただいたところ、綺麗に表示できました。 重ねてで申し訳ないのですが…今後、 (1)表示させたイメージファイルをクリックして音を出す (2)読みこむファイルが増えていくので更新を楽にするために、外部XMLからよみこみ。 としようと思ってるのですが、今回教えていただいたスクリプトを元に作っていくのがよいでしょうか? アドバイスをいただけると大変ありがたいです。 ※初歩的な質問で申し訳ありません。
お礼
初心者の私に丁寧に教えていただきありがとうございます。 非常によくわかりました。 人にXMLを使って作って欲しいと頼まれていたのですが… 確かに仰るとおりXMLで作る必要は無さそうです。 音データに入れ替えて、応用させていただきたいと思います。 本当にありがとうございました。