順番に関数を実行する
September 18, 2008 4:18 PM0
ActionScript2.0で定番でつかっていた実行した関数が終了したら、また同じ関数を呼び出す処理をActionScript3.0で。
このブログのサイドメニューのような動きもこれで可能(上から順番に出てくる動き)。
package
{
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author DefaultUser (Tools -> Custom Arguments...)
*/
public class Bars
{
var container:DisplayObjectContainer;
var stageW:int;
var stageH:int;
var barH:int;
var barNo:uint = 0;
var barCnt:uint = 10;
public function Bars(theContainer:DisplayObjectContainer)
{
container = theContainer;
stageW = container.stage.stageWidth;
stageH = container.stage.stageHeight;
barH = Math.ceil(stageH / barCnt);
nextBar();
}
private function nextBar():void
{
barNo++;
if (barNo <= barCnt)
{
var sp:Sprite = new Sprite();
container.addChild(sp);
sp.x = 0;
sp.y = barH * (barNo - 1);
sp.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
drawBar(sp);
}
}
private function drawBar(sp:Sprite):void
{
var color:uint = 0xFFFFFF * Math.random();
var alpha:Number = 1.0;
sp.graphics.beginFill(color, alpha);
sp.graphics.drawRect(0, 0, 1, barH);
sp.graphics.endFill();
}
private function enterFrameHandler(e:Event):void
{
var barSprite:Sprite = e.target as Sprite;
var barW:Number = barSprite.width;
if (barW < stageW)
{
barSprite.width = barW * 2;
}
else
{
barSprite.width = stageW;
barSprite.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
nextBar();
}
}
}
}
barSprite.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
で終了したイベントは消去しているのに注意。
エンターフレームは、if (barNo <= barCnt)で実行に条件がついています。
条件外の場合はエンターフレームは動作しません。