纳金网
标题:
Flare3D中播放动画的方法-gotoAndPlay详解
[打印本页]
作者:
yeu1233
时间:
2012-8-31 09:15
标题:
Flare3D中播放动画的方法-gotoAndPlay详解
在Flare3D的gotoAndPlay和flash中的gotoAndPlay作用是一样的。用来播放设定好的帧动画,
Flare3D中的gotoAndPlay有3个参数
参数1:播放设定好的动画
参数2:从当前状态到播放的动画之间的过渡帧数
参数3:播放模式。播放模式目前有3种。Pivot3D.ANIMATION_LOOP_MODE(循环播放),Pivot3D.ANIMATION_PING_PONG_MODE(循环正播,倒播),Pivot3D.ANIMATION_STOP_MODE(播完即停止,例如死亡)
在Flare3D中,能够侦听Pivot3D.ANIMATION_COMPLETE_EVENT事件,在动画播完后触发。例如
npc.gotoAndPlay("death",0,Pivot3D.ANIMATION_STOP_MODE);
npc.addEventListener(Pivot3D.ANIMATION_COMPLETE_EVENT,onAnCom);
private function onAnCom(e:Event):void
{
npc.removeEventListener(Pivot3D.ANIMATION_COMPLETE_EVENT,onAnCom);
npc.gotoAndPlay("***n");
}
但是我发现,侦听这个事件,如果之前播放动画设定的是Pivot3D.ANIMATION_STOP_MODE模式,触发事件后就无法正常播放其他动画了。不知道哪位兄弟有解决方法?
目前我的解决方法就是不使用Pivot3D.ANIMATION_STOP_MODE模式。以下是一段完整的例子,可以通过数字键1-9切换动作动画
按键1:行走
按键2:跑动
按键3:等待
按键4:将动画过度设为100帧,可以很明显的感觉到
按键5:使用循环播放模式播放死亡动作
按键6:使用正播逆播的模式播放死亡动作
按键7:使用播放完即停止的模式播放死亡动作,同时侦听ANIMATION_COMPLETE_EVENT事件。大家可以看到死亡动作结束后出现了停止问题。
package eko
{
import base.Base;
import flare.basic.Scene3D;
import flare.basic.Viewer3D;
import flare.core.Camera3D;
import flare.core.Label3D;
import flare.core.Pivot3D;
import flare.loaders.Flare3DLoader;
import flare.system.Input3D;
import flash.events.Event;
public class Label3DTest extends Base
{
[Embed(source="npc.f3d",mimeType="application/octet-stream")]
private var Role:Class;
private var RoleLoader:Flare3DLoader;
private var npc
ivot3D;
private var scene:Scene3D;
public function Label3DTest(info:String="gotoAndPlay详解")
{
super(info);
var scene:Scene3D=new Viewer3D(this);
scene.camera=new Camera3D();
scene.camera.z=-50;
scene.camera.y=20;
RoleLoader=new Flare3DLoader(Role);
RoleLoader.load();
npc=RoleLoader.getChildByName("npc");
npc.addLabel(new Label3D("wait",1,63));
npc.addLabel(new Label3D("walk",65,106));
npc.addLabel(new Label3D("***n",108,133));
npc.addLabel(new Label3D("death",285,350));
scene.addChild(npc);
npc.gotoAndPlay("wait");
scene.addEventListener(Scene3D.UPDATE_EVENT,onUpdate);
}
private function onUpdate(e:Event):void
{
if(Input3D.keyUp(Input3D.NUMBER_1))
{
npc.gotoAndPlay("walk");
}else if(Input3D.keyUp(Input3D.NUMBER_2))
{
npc.gotoAndPlay("***n");
}else if(Input3D.keyUp(Input3D.NUMBER_3))
{
npc.gotoAndPlay("wait");
}else if(Input3D.keyUp(Input3D.NUMBER_4))
{
npc.gotoAndPlay("wait",100);
}else if(Input3D.keyUp(Input3D.NUMBER_5))
{
npc.gotoAndPlay("death",10,Pivot3D.ANIMATION_LOOP_MODE);
}else if(Input3D.keyUp(Input3D.NUMBER_6))
{
npc.gotoAndPlay("death",10,Pivot3D.ANIMATION_PING_PONG_MODE);
}else if(Input3D.keyUp(Input3D.NUMBER_7))
{
npc.gotoAndPlay("death",0,Pivot3D.ANIMATION_STOP_MODE);
npc.addEventListener(Pivot3D.ANIMATION_COMPLETE_EVENT,onAnCom);
}
}
private function onAnCom(e:Event):void
{
npc.removeEventListener(Pivot3D.ANIMATION_COMPLETE_EVENT,onAnCom);
npc.gotoAndPlay("***n");
}
}
}
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5