Starling Juggler

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 );
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值