アプリ版:「スタンプのみでお礼する」機能のリリースについて

AS3.0初心者です。
恐れ入りますが、教えていただきたいことがあります。

【開発環境:WinXP FlashCS4】

・a_btnボタンをクリックすると、外部1フォルダの中の複数イメージファイル(jpg)が同時に表示される。
・b_btnボタンをクリックすると、外部2フォルダの中の複数イメージファイルが同時に表示される

但し、他のフォルダの画像が出ている時は、前表示されていた画像は削除される


というものを制作しております。
a_btnをクリックすると、外部フォルダが同時に表示されるところまでは作れたのですが、b_btnをクリックした時に、a_btnをクリックした時に出てきた画像を削除して、新たに画像を表示させるというところでつまづいております。

現在のスクリプト↓
------------------------------------------------------------
var loader:Loader=new Loader();
a_btn.addEventListener(MouseEvent.CLICK,xClick);

//配列の設定
var song01:Array = ["1/e01.jpg","1/e02.jpg","1/e03.jpg","1/e04.jpg"];
var loaderList:Array = new Array();

//iの初期値
var i:int = 0;
//spaceの設定
var space:Number =50;

function xClick(evt:MouseEvent):void{
for(var i:int=0; i < song01.length;i++){

loaderList[i] = new Loader();
var urlReq:URLRequest= new URLRequest(song01[i]);
addChild(loaderList[i]);
loaderList[i].load(new URLRequest(song01[i]));
loaderList[i].y = space * i+ 250;
trace(song01[i]);
}
}
----------------------------------------------------------
最終的にはXMLからファイルを読み出して、読み出したファイルをクリックすると音データが再生されるものを作成しようと思っております。

書籍などを見ても、うまく応用できず…恐れ入りますがヒントだけでもいただけると大変助かります。よろしくお願いできませんでしょうか?

A 回答 (2件)

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を引数に、カスタム関数を呼び出す
}
//ここまで
    • good
    • 0
この回答へのお礼

joy_28さま
ありがとうございます。非常によくわかりました。
実際に利用させていただいたところ、綺麗に表示できました。

重ねてで申し訳ないのですが…今後、
(1)表示させたイメージファイルをクリックして音を出す
(2)読みこむファイルが増えていくので更新を楽にするために、外部XMLからよみこみ。

としようと思ってるのですが、今回教えていただいたスクリプトを元に作っていくのがよいでしょうか?

アドバイスをいただけると大変ありがたいです。
※初歩的な質問で申し訳ありません。

お礼日時:2009/12/16 01:15

shotakaさん、


(1)表示させたイメージファイルをクリックして音を出す

音がないので、検証してないですが、以下の例は、イメージをクリックすると、配列で定義した、サイトにリンクされる例です。キーは、イメージをクリックした際に、そのイメージが保有してる番号を取得できるかどうかです。それさえ取得できれば、外部サイトへのリンクであろうと、音であろうと、自由に出来るはずです。
//ここから
var max:uint=4;//400×300を、120×90に縮小して、4枚読み込むケース
//音の変わりに、著名サイトのURLを使って、配列を作っておき、
var url:Array=["http://yahoo.co.jp","http://google.com/","http:/ …];

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を決めることが、肝要ではないでしょうか。
    • good
    • 0
この回答へのお礼

初心者の私に丁寧に教えていただきありがとうございます。
非常によくわかりました。

人にXMLを使って作って欲しいと頼まれていたのですが…
確かに仰るとおりXMLで作る必要は無さそうです。

音データに入れ替えて、応用させていただきたいと思います。
本当にありがとうございました。

お礼日時:2009/12/16 15:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!