• ベストアンサー

AS3.0でクリックしてMCを拡大表示させる方法

お世話になります。 FLASH初心者ですが、参考書やネットで調べてもわからないので 質問させていただきます。 今回、以下の様なFLASHを作成したいと考えておりますが、AS3.0を 用いたコーディングの仕方がわかりません。 ・アイコンが複数あり、クリックすると拡大表示される ・拡大表示された画像および動画は、再度クリックすると消える ・アイコンはランダムに動く お手数ですが、ご教授のほどよろしくお願いいたします。

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

  • ベストアンサー
回答No.1

以下ドキュメントクラスを使った一例です. 新規でASファイル(Main.as)を作成します. 次に新規でflaファイル(AS3.0)を作成します. 適当なシンボルを作成し、リンケージでクラスに書き出します. リンケージプロパティで、"ActionScriptに書き出し" と "最初のフレームに書き出し" にチェック、 クラス名はIcon_、基本クラスはflash.display.Spriteとしています. ドキュメントクラスにMain(.as)を指定します. .flaファイルは以上です. Main.asの内容は以下の通りです. //Main.as package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite{ var arr:Array = new Array(); var sw:Number = stage.stageWidth; var sh:Number = stage.stageHeight; var count:int = 5; //コンストラクタ public function Main(){ init(); } private function init(){ addEventListener(Event.ENTER_FRAME, onEnterFrame); addEventListener(MouseEvent.CLICK, onClick); //アイコン生成(とりあえず5個) for(var i:int = 0; i<count; i++){ var _icon:Icon_ = new Icon_(); addChild(_icon); //適当な位置に配置しクリック判定用のフラグを0にする _icon.useHandCursor = true; _icon.x = randomInt(0,sw); _icon.y = randomInt(0,sh); _icon.flg = 0; _icon.addEventListener(Event.REMOVED_FROM_STAGE,onRemoved); //配列に収納 arr.push(_icon); } } //ランダムに動かす private function onEnterFrame(e:Event){ var len = arr.length; for(var i:int = 0; i<len; i++){ var tmp = arr[i]; tmp.x += randomInt(-10,10); tmp.y += randomInt(-10,10); //ステージ外に出た場合の処理 if(tmp.x > sw + tmp.width/2){ tmp.x -= sw + tmp.width; }else if(tmp.x < 0 - tmp.width/2){ tmp.x += sw + tmp.width; } if(tmp.y > sh + tmp.height/2){ tmp.y -= sh + tmp.height; }else if(tmp.y < 0 - tmp.height/2){ tmp.y += sh + tmp.height; } } } //クリックされたとき、クリックイベントが起きたターゲットを調べて //そのターゲットのサイズを拡大 private function onClick(e:MouseEvent){ var tmp:Icon_= e.target as Icon_; tmp.scaleX = tmp.scaleY = 2; //フラグが1(=一度クリックされている)ならそのターゲットを削除 //フラグが0(=初めてクリックされた)ならそのターゲットの動きを止めてフラグに1を追加 if(tmp.flg){ removeChild(tmp); }else{ var index:int = arr.indexOf(tmp); arr.splice(index,1); tmp.flg++; } } //全てのアイコンが消えたときの処理 private function onRemoved(e:Event){ count--; if(count==0){ trace("全部消えました"); } removeEventListener(Event.REMOVED_FROM_STAGE,onRemoved); } //ランダムな整数を得るための関数 function randomInt (int1, int2) { var max = Math.max(int1, int2); var min = Math.min(int1, int2); var nRandomInt = Math.floor(Math.random()*(max-min+1))+min; return nRandomInt; } } } 上記では各アイコンは同じクラス(Icon_)から 同じ外観で作成しています. アイコンの動きは最低限のものです. あくまで一例ですので、画像やテキストを使ったアイコンを作成して リンケージで書き出して使ったり、 アイコンの動きを各アイコン自身に持たせたり、 色々改変してみてください.

cliosworld
質問者

お礼

ご回答ありがとうございました。 イメージ通りの物が出来上がりました。 これからもっと勉強して、改変できるように頑張ります。