当前位置: 首页 > 工具软件 > Starling 2D > 使用案例 >

Starling Juggler

章宏恺
2023-12-01
Juggler类允许我们控制所有实现了IAnimatable接口的对象的动画播放。MovieClip类实现
了该接口,你也可以自定义一个动画类在Starling中播放,你所要做的,仅仅是让你的自定
义类实现IAnimatable 接口,然后重载advanceTime方法即可。Starling粒子插件(用以
在Starling中实现粒子效果,在本教程最后会介绍)就是这么实现的。
下面代码是MovieClip类实现其动画功能的主要逻辑。它每一帧都会切换纹理。看起来有
点像我们在原生Flash中用切换一个Bitmap的bitmapData属性来实现动画的方式:
// IAnimatable
public>if (!mPlaying || passedTime == 0.0 || mCurrentTime == mTotalTime) return;
var>var durationSum:Number = 0.0;
var>var restTime:Number = mTotalTime - mCurrentTime;
var>mCurrentTime = Math.min(mTotalTime, mCurrentTime + passedTime);
for>{
if (mCurrentFrame !=>updateCurrentFrame();
playCurrentSound();
}
break;
}
++i;
durationSum +=>hasEventListener(Event.MOVIE_COMPLETED))
{

dispatchEvent(new Event(Event.MOVIE_COMPLETED)); 

}
advanceTime(carryOverTime);
}
下面列出Juggler中所有可用的API:
∗>

}
 // this API will be called from outside
 // stop calling it will pause the content played by this Juggler in this sprite (BattleScene)
 public function advanceTime ( time:Number ):void
 {
    juggler.advanceTime( time );
 }
 public override function dispose():void
 {
   juggler.purge();
   super.dispose();
 }
}
}
好了,当外部想要激活此面板时,只需要侦听EnterFrameEvent.EVENT事件并在事件侦
听器中,以EnterFrameEvent事件对象的passedTime属性作为参数调用此面板对象的
advanceTime方法即可。
private function onFrame(event:EnterFrameEvent):void
{
   if ( paused )
   battle.advanceTime( event.passedTime );
}
当游戏被暂停后,我们需要停止每帧对advanceTime方法的调用,这样就可以停止战场模
块的动画内容播放。当然,如果此时我们需要让菜单面板弹出并播放此面板中的动画,只需
要添加如下几句:
private function onFrame(event:EnterFrameEvent):void
{
      if ( paused )
         alertBox.advanceTime ( event.passedTime );
     else battle.advanceTime( event.passedTime );
     dashboard.advanceTime ( event.passedTime );
}

 类似资料:

相关阅读

相关文章

相关问答