查看: 2271|回复: 0
打印 上一主题 下一主题

Flare3D中播放动画的方法-gotoAndPlay详解

[复制链接]

435

主题

2

听众

6371

积分

高级设计师

Rank: 6Rank: 6

纳金币
6372
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-8-31 09:15:00 |只看该作者 |倒序浏览
在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(&quot***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 npcivot3D;

     
            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(&quot***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(&quot***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(&quot***n");

     
            }

     
        }

     
    }




分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-1-11 10:54 , Processed in 0.063036 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部