ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:cliosworld AS3.0でクリックしてMCを拡大表示させる方法
困り度:
  • すぐに回答を!
お世話になります。
FLASH初心者ですが、参考書やネットで調べてもわからないので
質問させていただきます。

今回、以下の様なFLASHを作成したいと考えておりますが、AS3.0を
用いたコーディングの仕方がわかりません。

・アイコンが複数あり、クリックすると拡大表示される
・拡大表示された画像および動画は、再度クリックすると消える
・アイコンはランダムに動く

お手数ですが、ご教授のほどよろしくお願いいたします。
質問投稿日時:09/11/04 02:04
質問番号:5420417
この質問に対する回答は締め切られました。

回答

良回答20pt

回答者:screenstar 以下ドキュメントクラスを使った一例です.

新規で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_)から
同じ外観で作成しています.
アイコンの動きは最低限のものです.
あくまで一例ですので、画像やテキストを使ったアイコンを作成して
リンケージで書き出して使ったり、
アイコンの動きを各アイコン自身に持たせたり、
色々改変してみてください.
種類:回答
どんな人:経験者
自信:参考意見
回答日時:09/11/07 07:32
回答番号:No.1
この回答へのお礼ご回答ありがとうございました。
イメージ通りの物が出来上がりました。
これからもっと勉強して、改変できるように頑張ります。