_Animation

用于动画相关的操作,包括创建、播放、停止和更新等。 全部展开

属性展开

  • + backward : bool

    是否倒序播放。默认值为false。

    • 示例

       i = _Animation.new('idle.san')
      i.backward = true
  • + current : uint

    动画当前播放时间。

    • 示例

       i = _Animation.new('idle.san')
      i.current = 1
  • + holder : object

    动画的所有者容器。

    • 示例

       skl1 = _Skeleton.new('girl.skl')
      skl2 = _Skeleton.new('girl.skl')
      san = skl1:addAnima('idle.san')
      san.holder = skl2
  • + loop : bool

    是否循环播放。默认值为false。

    • 示例

       i = _Animation.new('idle.san')
      i.loop = false
  • + name : string

    动画的逻辑名称。

    • 示例

       i = _Animation.new('idle.san')
      i.name = 'idle'
  • + pause : bool

    true 的时候为暂停,false 的时候为播放,play 方法会强制设置该属性为 false。

    • 示例

       i = _Animation.new('idle.san')
      i.pause = true
  • + pri : uint

    动画的优先级。数值越大优先级越高。播放动画时会按优先级的顺序分配权重。

  • + resname : string

    动画的资源文件名。更改这个属性,动画会使用的新资源名重新加载。

    • 示例

       i = _Animation.new('idle.san')
      i.resname = 'idle1.san'
  • + speed : number

    动画的播放速度。默认值为1.0。

    • 示例

       i = _Animation.new('idle.san')
      i.speed = 3
  • + weight : number

    动画更新的权重。取值范围是[0, 1]。默认值为1.0。

    • 示例

       i = _Animation.new('idle.san')
      i.weight = 0.1

只读属性展开

  • + duration : uint

    动画的总持续时间。

    • 示例

       i = _Animation.new('idle.san')
      print(i.duration)
  • + graEvent : _GraphicsEvent

    动画的graphicEvent。

    • 示例

       i = _Animation.new('idle.san')
      print(i.graEvent:getTagCount())
  • + isPlaying : bool

    动画是否播放。

    • 示例

       i = _Animation.new('idle.san')
      print(i.isPlaying)

构造方法展开

  • + function _Animation(animaList : array)
    • 参数
    • animaList : 动画列表。其中每一项有属性值uri和prob。属性uri为动画资源文件名。 prob为播放的概率参数,类型为uint。 每一项的prob值除以列表中所有动画prob值的和,即为该动画播放的概率。
    • 示例

       i = _Animation.new({ {uri = 'san1.san', prob = 10}, {uri = 'san2.san', prob = 20} })
  • + function _Animation(resname : string)
    • 参数
    • resname : 资源文件名。可以是mesh动画文件或skeleton动画文件。
    • 示例

       i = _Animation.new('idle.san')
      i = _Animation.new('idle.san | action_f_b-girl00001_idle00002.tag')

公共方法展开

  • + function combine(anima : _Animation)

    合并动画。

    • 参数
    • anima : _Animation 被合并的动画。
    • 示例

        skl = _Skeleton.new('girl.skl')
      san1 = skl:addAnima('san1.san')
      san2 = skl:addAnima('san2.san')
      san1:combine(san2)
  • + function disableDeltaTransform(p : string)
    function disableDeltaTransform(p : uint)

    关闭动画变换。

    • 参数
    • p : string or uint 轨迹的名字 or 轨迹的索引。
    • 示例

        skl = _Skeleton.new('pitfighter.skl')
      san = skl:addAnima('pitfighter-run.san')
      san:lock('root')
      san:disableDeltaTransform('root')
      san:play()
  • + function enableDeltaTransform(p : string)
    function enableDeltaTransform(p : uint)

    允许动画的变换。

    • 参数
    • p : string or uint 轨迹的名字 or 轨迹的索引。
    • 示例

        skl = _Skeleton.new('pitfighter.skl')
      san = skl:addAnima('pitfighter-run.san')
      san:lock('root')
      san:enableDeltaTransform('root')
      san:play()
  • + function getDeltaTransform(p : string, out : _Matrix3D) : _Matrix3D
    function getDeltaTransform(p : uint, out : _Matrix3D) : _Matrix3D

    获取动画的变换。

    • 参数
    • p : string or uint 轨迹的名字 or 轨迹的索引。
    • out : _Matrix3D为获取到的变换矩阵,传出参数。

    • 示例

       skl = _Skeleton.new('pitfighter.skl')
      san = skl:addAnima('pitfighter-run.san')
      san:lock('root')
      san:enableDeltaTransform('root')
      san:getDeltaTransform('root')
  • + function getKeyframe(p : string, index : uint[, out : _Matrix3D])
    function getKeyframe(p : uint, index : uint[, out : _Matrix3D])

    获取指定的关键帧。

    • 参数
    • p : string or uint 轨迹的名字 or 轨迹的索引。
    • index : uint 关键帧的索引。
    • out : _Matrix3D 关键帧的变换。

    • 示例

       skl = _Skeleton.new('pitfighter.skl')
      san = skl:addAnima('pitfighter-run.san')
      san:lock('root')
      san:enableDeltaTransform('root')
      san:play()
      vec = san:getKeyframe('root', 0):getTranslation()
  • + function getKeyframeCount(p : string)
    function getKeyframeCount(p : uint)

    获取指定关键帧的数量。

    • 参数
    • p : string or uint 轨迹的名字 or 轨迹的索引
    • 示例

        skl = _Skeleton.new('pitfighter.skl')
      san = skl:addAnima('pitfighter-run.san')
      san:lock('root')
      san:enableDeltaTransform('root')
      san:play()
      num = san:getKeyframeCount('root')
  • + function getKeyframes()

    获取动画关键帧。

    • 示例

        san:getKeyframes()
  • + function lock(p : string)
    function lock(p : uint)

    锁定一个指定的轨迹。

    • 参数
    • p : string or uint 轨迹的名称 or 轨迹的索引。

    • 示例

        san = _Animation.new('pitfighter-run.san')
      san:lock('root')
  • + function onEvent(callback) : _Animation
    • 返回
    • true表示自行处理该事件。false表示引擎按默认规则处理该事件。
    • 参数
    • 回调函数callback(eventName : string) ,返回一个bool值

    • 示例

        san:onEvent(function(eventName)  
      print('Event : ' .. eventName)
      return false
      end)
      san:triggerEvents()
  • + function onStop(callback)
    • 参数
    • callback(回调参数)。
    • 示例

       anima:onStop(function()
      flag = false
      end)
  • + function play([duration : uint])

    播放动画。

    • 参数
    • duration : 播放持续时间。可选参数,默认值为0,表示一直播放。
    • 示例

        i = _Animation.new('idle.san')
      san = skl:addAnima(i)
      san:play()
  • + function save(resname : string)

    保存动画文件。

    • 参数
    • resname : 待保存的资源文件名。
    • 示例

        san = _Animation.new('idle.san')
      san:save(san.resname)
  • + function seek(t : number) : _Animation
    function seek(t : string) : _Animation

    查找目标帧

    • 参数
    • t : 目标时间或tag的名字。
    • 示例

       i = _Animation.new('idle.san')
      san = skl:addAnima(i)
      san:seek(0.5)
  • + function skip(time : uint)

    动画静止一段时间不刷新。

    • 参数
    • time : 动画静止的时间。
    • 示例

        i = _Animation.new('idle.san')  
      i:skip(2000)
  • + function stop()

    停止播放动画。

    • 示例

        i = _Animation.new('idle.san')
      san = skl:addAnima(i)
      san:play()
      san:stop()
  • + function stopPfxEvents(stopnow : bool)

    停止特效事件。

    • 参数 stopnow : bool是否立即停止特效事件。

    • 示例

        san:stopPfxEvents()
  • + function triggerEvents()

    触发动画事件。

    • 示例

        san = _Animation.new('skill.san|skill1.tag')
      san:onEvent(function(e)
        print('Event : ' .. e)
        return false
      end)
      san:triggerEvents()
  • + function unlock(p : string)
    function unlock(p : uint)

    解锁一个指定的轨迹。

    • 参数
    • p : string or uint 轨迹的名称 or 轨迹的索引。

    • 示例

        san = _Animation.new('pitfighter-run.san')
      san:unlock('root')

代码示例

    _sys:addPath('res')
    _dofile('cameracontrol.lua')
    _rd.camera.eye = _Vector3.new(20, -30, 16)
    _rd:useLight(_AmbientLight.new())
    _rd:useLight(_SkyLight.new())
    mat = _Matrix3D.new():setTranslation(0, 0, -9)
    role = _Mesh.new()
    role:addSubMesh('arm.skn')
    role:addSubMesh('face.skn')
    role:addSubMesh('hair.skn')
    role:addSubMesh('body2.skn')
    role:addSubMesh('leg2.skn')
    skl = _Skeleton.new('girl.skl')
    skn = _Mesh.new('sword.msh')
    mrw = skl:getBoneTransform('rw')
    skl = skn:attachSkeleton(skl, 'rw', mrw)
    role:attachSkeleton(skl)
    i = _Animation.new('idle.san')
    i.name = 'idle'

    font = _Font.new('Arial', 10)
    font.textColor = _Color.Yellow

    local playing = false

    _app:onKeyDown(function(key)
    if key == _System.Key1 then
    Key1Down()
    elseif key == _System.Key2 then
    san = skl:addAnima('san1.san')
    san:play()
    elseif key == _System.Key3 then
    san = skl:addAnima('san2.san')
    san:play()
    end
    end)

    function Key1Down()
    if not playing then
    san = skl:addAnima(i)
    san.loop = true
    san:play()
    playing = true
    else
    skl:delAnima('idle')
    playing = false
    end
    end

    _app:onIdle(function(e)
    font:drawText(0, 0, 'Press 1 to play and stop')
    font:drawText(0, 14, 'Press 2 to attack1')
    font:drawText(0, 28, 'Press 3 to attack2')
    _rd:pushMatrix3D(mat)
    role:drawMesh()
    skn:drawMesh()
    _rd:popMatrix3D()
    end)
问题反馈(登录才可以发表哦!)