cocos-Lua07帧动画&骨骼动画

来源:互联网 发布:淘宝网卖什么比较畅销 编辑:程序博客网 时间:2024/05/19 22:06

学而时习之:


常用Action
  MoveTo
  MoveBy
  RoateTo
  RoateBy
  .....
 lua-test
-----------------------
Sequene 一组动作顺序播放
Spawn 一组动作同时执行
次数 Repeat RepeatForEver
取反和跟踪
动画的播放Animate

-----------------------------------------
Action是对节点处理的计划任务的封装
--------------------------------------------
实现动画的播放
1.定义动画的每一帧
  local allframe={}
  for i=1,5 do
    allframe[i]=cc.SpriteFrame:create(...)
  end
2.定义Animation
  local a=cc.Animation:createWithSpriteFrames(allframe,0.3)
3.定义Animate
  local animate=cc.Animate:create(a)
4.在一个Sprite上执行Action
  local sp=cc.Sprite:create()
  sp:runAction(animate)
---------------------------------------
TexturePacker纹理打包工具
cc.SpriteFrameCache来加载打包后的纹理图片
---------------------------------------------
动画的切换
cc.AnimationCache




思路呀很清晰:


使用Animation Editor创建动画
1。帧动画
1.1 使用Animation Editor创建一个项目
1.2 需要使用的动画序列拷贝到Resources文件夹
1.3 编辑动画
1.4 导出动画文件export
1.5 在代码中加载
    ccs.ArmatureDataManager:getInstance():
          addArmatureFileInfo("frameAnimation/frameAnimation.ExportJson")
    local arm=ccs.Armature:create("frameAnimation")
    arm:getAnimation():play("walk") --播放某一个动画
    arm:getAnimation():playWithIndex(0) --播放动画编辑器中的第一个动画
    layer:addChild(arm)
    arm:setPosition(self.winsize.width/2,self.winsize.height/2)
2。骨骼动画
   动画的每一帧通过小的图片块来拼接
   动画效果更细腻
   图片资源更小
   
   骨骼
   图片块
   帧《==》 多个骨骼
   动画《==》多个帧
----------------------------------------------
刀塔传奇----------------骨骼动画
   2.1 在动画编辑器中创建项目
   2.2 将动画所需要的骨骼图片拷贝到Resource中
   2.3 定义动画的第一帧
   2.4 定义骨骼 每个图块对应一个骨骼
   2.5 定义图片块到骨骼的绑定
   2.6 定义骨骼的父子关系
   2.7 进入动画模式
        定义每个图层的动作
   2.8 保存项目导出动画
   2.9 在代码中加载动画
ccs.ArmatureDataManager:getInstance():addArmatureFileInfo("boneAni/boneAni.ExportJson")
local arm=ccs.Armature:create("boneAni")
arm:getAnimation():play("walk")
layer:addChild(arm)
arm:setPosition(self.winsize.width/2,self.winsize.height/2)



代码撸啊(Lua)。。。嘻嘻嘻!!!


FrameAniScene.lua

--帧动画
local FrameAniScene=class("FrameAniScene",function ()
return cc.Scene:create()
end)
--create函数
function FrameAniScene:create()
local fs=FrameAniScene:new()
fs:addChild(fs:init())
return fs
end
--ctor函数
function FrameAniScene:ctor()
self.winsize=cc.Director:getInstance():getWinSize()
self.walk=true --true walk false run
end
--init函数
function FrameAniScene:init()
local layer=cc.Layer:create()
--添加通过Animation Editor编辑器编辑好的动画
ccs.ArmatureDataManager:getInstance():addArmatureFileInfo("frameAnimation/frameAnimation.ExportJson")
    local arm=ccs.Armature:create("frameAnimation")
    arm:getAnimation():play("walk")
--    arm:getAnimation():playWithIndex(0)
    layer:addChild(arm)
    arm:setPosition(self.winsize.width/2,self.winsize.height/2)
    
    local function touchBegan(t,e)
     self.walk=not self.walk
      --实现动画的切换
      if self.walk then
         arm:getAnimation():play("walk")
      else
         arm:getAnimation():play("run")
      end  
     return true
    end
    local listener=cc.EventListenerTouchOneByOne:create()
    listener:registerScriptHandler(touchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
    cc.Director:getInstance():getEventDispatcher()
      :addEventListenerWithSceneGraphPriority(listener,layer)
return layer
end
return FrameAniScene



BoneScene.lua

local BoneScene=class("BoneScene",function ()
return cc.Scene:create()
end)
--create函数
function BoneScene:create()
local bs=BoneScene:new()
bs:addChild(bs:init())
return bs
end
--ctor函数
function BoneScene:ctor()
self.winsize=cc.Director:getInstance():getWinSize()
self.displayIndex=0
end
--init函数
function BoneScene:init()
local layer=cc.Layer:create()
--骨骼动画的加载
ccs.ArmatureDataManager:getInstance():addArmatureFileInfo("chuanzhang/chuanzhang.ExportJson")
    local arm=ccs.Armature:create("chuanzhang")
arm:getAnimation():play("walk")
layer:addChild(arm)
arm:setPosition(self.winsize.width/2,self.winsize.height/2)
--动态修改骨骼的皮肤
-- cc.SpriteFrameCache:getInstance():addSpriteFrames("weapon.plist")
--    local weapon =
--        {
--            "weapon_f-sword.png",
--            "weapon_f-sword2.png",
--            "weapon_f-sword3.png",
--            "weapon_f-sword4.png",
--            "weapon_f-sword5.png",
--            "weapon_f-knife.png",
--            "weapon_f-hammer.png",
--        }
--
--    local i = 1
--    for i = 1,table.getn(weapon) do
--       --定义骨骼动画的皮肤
--        local skin = ccs.Skin:createWithSpriteFrameName(weapon[i])
--        arm:getBone("Layer27"):addDisplay(skin, i - 1)
--    end


    -- handling touch events   
    local function onTouchEnded(touches, event)     
--        self.displayIndex = (self.displayIndex + 1) % (table.getn(weapon) - 1)
--        --修改骨骼对应的皮肤
--        arm:getBone("Layer27"):changeDisplayWithIndex(self.displayIndex, true)
        arm:getAnimation():play("attack")
  
    end


    local listener = cc.EventListenerTouchAllAtOnce:create()
    listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCHES_ENDED )
    cc.Director:getInstance():getEventDispatcher()
      :addEventListenerWithSceneGraphPriority(listener,layer)
return layer
end


return BoneScene


0 0
原创粉丝点击