`
cloud21
  • 浏览: 397436 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

AnimationState

    博客分类:
  • Flex
阅读更多
package engine
{
        import flash.display.*;
        import flash.geom.*;
        
        public class AnimationState
        {
                public static var DIR_NULL:int = 0;
                public static var DIR_LEFT:int = 1;
                public static var DIR_RIGHT:int = 2;
                public static var DIR_UP:int = 4;
                public static var DIR_DN:int = 8;
                public static var DIR_LEFT_UP:int         = DIR_LEFT | DIR_UP;
                public static var DIR_LEFT_DN:int         = DIR_LEFT | DIR_DN;
                public static var DIR_RIGHT_UP:int         = DIR_RIGHT | DIR_UP;
                public static var DIR_RIGHT_DN:int         = DIR_RIGHT | DIR_DN;
                
                public static var MOTION_WALK:int                         = 0; //行走
                public static var MOTION_WAIT:int                         = 1; //普通待机
                public static var MOTION_FIGHT_WAIT:int         = 2; //战斗待机
                public static var MOTION_SKILL:int                         = 3; //施法
                
                
                private var m_nFrameNum:int                                        = 0; //动作总帧数
                private var m_nAnimTotalTime:int                         = 0; //动作时间长度(单位毫秒)
                private var m_nCurrDuration:int                         = 0; //当时动作已持续了多少时间
                private var m_nCurrMotionFrame:int                        = 0;        //当时动作插入到哪一帧了
                private var m_currMotion:int                                 = 0; //当时动作是编号
                private var m_Entity:Entity                                 = null; //动作的主人
                private var m_bLoop:Boolean                                        = false; //动作是否循环
                private var m_bMotionEnd:Boolean                        = false; //是否播完了
                
                public function AnimationState(nMotion:int, nFrameNum:int, nTotalTime:int, et:Entity, loop:Boolean)
                {
                        this.m_currMotion                 = nMotion;
                        this.m_nFrameNum                 = nFrameNum;
                        this.m_nAnimTotalTime         = nTotalTime;
                        this.m_Entity                        = et;
                        this.m_nCurrDuration        = 0;
                        this.m_bLoop                        = loop;
                }
                
                public function ResetMotion():void
                {
                        this.m_nCurrDuration         = 0;
                        this.m_bMotionEnd                = false;
                }
                
                public function MotionIsEnd():Boolean
                {
                        return this.m_bMotionEnd;
                }
                
                public function AddTime():void
                {
                        var nFrameTime:int = Engine.GetInstance().GetCurrFrameTime();
                        this.m_nCurrDuration += nFrameTime;
                        
                        if (m_bMotionEnd) return;
                        
                        //算出每一帧插入的时间长度
                        var nSingleFrameTime:int = this.m_nAnimTotalTime / this.m_nFrameNum;
                        var nFrameNum:int = this.m_nCurrDuration/nSingleFrameTime;
                        if (nFrameNum > this.m_nFrameNum)
                        {
                                                                m_nCurrDuration = this.m_nCurrDuration % nSingleFrameTime;
                                if (this.m_bLoop)
                                {
                                        nFrameNum = 0;        
                                }
                                else
                                {
                                        m_bMotionEnd = true;
                                        return;
                                }
                        }
                        
                        //算出来的帧和当前帧相同就什么也不做
                        if (nFrameNum == this.m_nCurrMotionFrame) return;
                        
                        //设置为当前帧
                        this.m_nCurrMotionFrame = nFrameNum;
                        
                        //单帧的象素宽度和高度
                        var nFramePixelWidth:int = this.m_Entity.GetSurface().width;
                        var nFramePixelHeight:int = this.m_Entity.GetSurface().height;
                        
                        //画
                        var bmpArr:Array = this.m_Entity.GetBmpArr();
                        var nLen:int = bmpArr.length;
                        var nY:int = this.m_Entity.GetTopPosByDir();
                        for (var i:int=0; i<nLen; i++)
                        {
                                var bmd:BitmapData = bmpArr[i] as BitmapData;
                                if (bmd)
                                {
                                        var rect:Rectangle = new Rectangle(m_nCurrMotionFrame*nFramePixelWidth,
                                                                                                        nY, nFramePixelWidth, nFramePixelHeight);
                                        this.m_Entity.GetSurface().copyPixels(bmd, rect, new Point(), null, null, true);
                                }                
                        }
                }
        }
}
分享到:
评论

相关推荐

    unet联网demo

    GetComponent().SetInteger("AnimationState", animationState); } } ``` 六、进阶话题 虽然"unet联网demo"未涉及子弹射击和血量扣除等复杂功能,但在实际项目中,这些是常见的需求。例如,使用`Command`标记的...

    OGRE 3D 1.7 Beginner's Guide 第五章 中文翻译

    // Create an AnimationState for the loaded animation _aniState = anim-&gt;createAnimationState(); _aniState-&gt;setEnabled(true); ``` 这里,我们假设模型骨架已经包含了一个名为"walk"的动画。如果模型没有内置...

    Sample.zip

    在Ogre中,动画主要通过AnimationState对象来控制。当你创建一个场景中的对象(如Entity)并加载其关联的模型时,模型可能包含多个动画。这些动画可以通过AnimationTrack来操纵对象的不同属性,例如骨骼位置、旋转或...

    Unity3D脚本:Unity3Danimation倒播1

    首先获取到对应的`AnimationState`,如`AnimationState clipState = _gameObject.animation["animationName"];`,然后根据条件判断是否需要倒播。如果是正向播放,设置`clipState.speed = 1f;`和`clipState.time = 0...

    Unity 5.x Animation Cookbook pdf 0分

    1. Unity的动画系统概览:学习如何使用Unity的动画工具和API,包括Animator、Animation State Machine和Blend Tree等。 2. 创建和管理动画剪辑:介绍如何在Unity中导入、创建和编辑动画剪辑,以及如何使用动画控制器...

    Spine 官方文档中文版_20141007.pdf

    AnimationState state = new AnimationState(data); // 假设 data 是 AnimationStateData 的实例 state.addListener(new AnimationStateAdapter() { public void event(int trackIndex, Event event) { // 检查并...

    Ogre中级教程非常棒的教程

    `mAnimationState`变量用于存储当前的动画状态,可以通过`AnimationState::setEnabled()`和`AnimationState::setWeight()`来开启或调整动画效果。 **两点间移动** 教程讲解了如何使一个对象从一个位置移动到另一个...

    一个ogre动画演示实例

    这些操作通常涉及Ogre API的调用,如`SceneNode::attachObject`用于将模型附加到场景节点,`AnimationState::setEnabled`用于开启或关闭动画,以及`AnimationState::setTimePosition`用于设置动画播放的时间位置。...

    unity3d游戏开发之角色的动画脚本的编写(二).pdf

    AnimationState jump = animation["jump"]; jump.layer = 1; jump.enabled = false; jump.wrapMode = WrapMode.Clamp; } void Update() { SuperMarioController marioController = gameObject.GetComponent...

    locomotion animation pack for thirdperson (unity3d)

    开发者可以通过Animator组件和动画状态机(Animation State Machine)来控制这些动画的播放和过渡,实现角色与环境的互动。 在实际应用中,这些动画还可以结合Unity的Mecanim动画系统,实现更复杂的动画层混合和...

    Unity Advanced AI Pro v7.2最新版 强大的AI系统

    * Supports user's own sound effects for each animation state. * AI has 3 patrol modes: Stay in place, or dynamic random wandering, or using a waypoints path (integrated Waypoint Editor).

    Unity3D游戏中慢动作与加速动作的实现1

    总结来说,Unity3D通过`Time.timeScale`和`Time.fixedDeltaTime`提供全局的慢动作与加速效果,而`AnimationState.speed`则允许我们针对单个动画进行调整。合理运用这些机制,开发者可以创造出各种独特且引人入胜的...

    基于Spine骨骼动画游戏 java

    开发者需要在每帧渲染时更新`Skeleton`和`AnimationState`,然后绘制到屏幕上。 5. **资源管理**:项目可能包含了一套资源管理机制,用于加载、缓存和释放Spine资源,以优化内存使用和性能。 通过分析和学习这个...

    Advanced AI Pro.zip

    Supports user's own sound effects for each animation state. AI has 3 patrol modes: Stay in place, or dynamic random wandering, or using a waypoints path (integrated Waypoint Editor). AI can alert its ...

    设置动画精灵默林动作,用简单易学的C#编的。

    例如,使用`GetComponent()`获取Animator实例,然后调用`SetInteger("AnimationState", state)`来改变动画状态,其中"AnimationState"是 Animator 的参数名,state 是你要切换到的状态的整数值。 6. 添加事件触发器...

    使用Irrlicht引擎播放动画注意事项

    3. **动画状态管理**:通过`AnimationState`类管理动画,例如设置动画的播放速度、是否循环播放等。调用`AnimationState::setEnabled`来启用或禁用特定的动画。 4. **时间同步**:为了确保动画流畅,需要同步引擎的...

    unity3d中文脚本

    Animation系统可以使用预设的动画片段(Animation Clips)和动画状态机(Animation State Machine)来控制复杂的动画逻辑。Bone Weight用于定义骨骼对网格模型不同部分的影响力,而Bounds涉及到游戏对象的边界计算和...

    cocos2d-x 3.0 spine1.9运行库

    4. **AnimationState.cpp**:AnimationState类管理着动画的播放状态,包括播放速度、暂停、重置、淡入淡出等。它可以处理多个动画的同时播放,以及动画之间的混合过渡。 5. **Atlas.cpp**:在Spine中,纹理附件(如...

    Dragonbones C++绑定Lua

    source_files = Animation.cpp AnimationState.cpp TimelineState.cpp WorldClock.cpp Armature.cpp Bone.cpp Object.cpp Slot.cpp EventData.cpp BaseFactory.cpp BaseDataParser.cpp ConstValues.cpp dbtinyxml2....

    ogre广告牌的创建与彩带的绑定跟踪源码分析

    `SceneNode`对象`mRedYellowLightsNode`和`mGreenBlueLightsNode`可能用于管理一组相关的灯光,而`std::vector&lt;AnimationState*&gt; mAnimStateList`则用于存储和管理场景中所有动画状态。 此外,还有个未展示的`...

Global site tag (gtag.js) - Google Analytics