quick-3.3学习笔记之状态机及骨骼动画的使用

原创 2015年11月17日 20:01:52

此博客仅作为自己的学习总结使用

function MainScene:ctor()

   local manager = ccs.ArmatureDataManager:getInstance()--获取骨骼动画管理器单例
   manager:addArmatureFileInfo("Hero/wuzhe.ExportJson")--添加文件到缓存里面
   local armature = ccs.Armature:create("wuzhe")
    armature:getAnimation():playWithIndex(0)
    armature:setPosition(240, 160);
     self:addChild(armature)
end


--状态机的实现

local Player = class("Player",function()
        return display.newSprite("#player1-1-1.png")
    end)

function Player:ctor()
    local StateMachine = require("framework.cc.components.behavior.StateMachine")
    self.fsm =  StateMachine.new() --创建状态机
    --from 可以由那几种状态   --to
    self.fsm:setupState({
        events = {
            {name = "walkAction", from = {"none","attackA","attackB"},   to = "walk" },
            {name = "hurtAction", from = "walk",  to = "hurt" },
            {name = "deadAction", from = "hurt", to = "dead" },
            {name = "attackAAction",  from = "walk",    to = "attackA"},
            {name = "attackBAction", from = "walk",    to = "attackB" },
     --none表示初始的状态,固定的
        },

--onbefore /on /onleave +状态,onbefore表示该状态激活前的回调函数,on表示正在激活的时候的回调函数

--onleave表示离开该状态的回调函数
        callbacks = {
            onbeforewalkAction = function(event) self:stopAllActions(); end,--执行该动作前,停止动作
            onwalkAction = function(event) self:walk() end,--执行的帧动画
            onleavewalkAction = function(event)  end,

            onbeforehurtAction = function(event) self:stopAllActions(); end,
            onhurtAction = function(event)
                    self:hurt();
                    self:performWithDelay(function() self.fsm:doEvent("deadAction") end, 1.0); --延迟函数
                end,
            onleavehurtAction =  function(event)  end,

            onbeforedeadAction = function(event) self:stopAllActions(); end,
            ondeadAction = function(event)self:dead() end,
            onleavedeadAction = function(event) end,

            onbeforeattackAAction = function(event) self:stopAllActions(); end,
            onattackAAction = function(event) self:attackA() end,
            onleaveattackAAction = function(event) end,

            onbeforeattackBAction = function(event)  self:stopAllActions(); end,
            onattackBAction = function(event) self:attackB() end,
            onleaveattackBAction = function(event) end,
        },
    })

end
function Player:walk()

--帧动画的实现,第一个参数表示图片命名格式,第二个参数表示起始的图片,第三个表示最后一张

     local frames = display.newFrames("player1-1-%i.png", 1, 4)--行走
    local animation = display.newAnimation(frames, 0.5 / 4) --创建动画
    self:playAnimationForever(animation)--该动画永久执行
end
function Player:hurt()
    local frames = display.newFrames("player1-4-%i.png", 1, 2)--被攻击
    local animation = display.newAnimation(frames, 0.5 / 2)
    self:playAnimationOnce(animation)
end
function Player:attackA()
    local frames = display.newFrames("player1-2-%i.png", 1, 4)--劈刺
    local animation = display.newAnimation(frames, 0.5 / 4)
    self:playAnimationForever(animation)
end
function Player:attackB()
    local frames = display.newFrames("player1-5-%i.png", 1, 4)--直刺
    local animation = display.newAnimation(frames, 0.5 / 4)
    self:playAnimationForever(animation)
end

function Player:dead()
 local frames = display.newFrames("player1-3-%i.png", 1, 4)--死亡
    local animation = display.newAnimation(frames, 0.5 / 4)
    self:playAnimationOnce(animation)
end

return Player



--以下是测试函数

local MainScene = class("MainScene", function()
    return display.newScene("MainScene")
end)

function MainScene:ctor()
    local Player = require("app.scenes.Player")
    local player = Player:new();
    player:setPosition(cc.p(480,320));
    self:addChild(player);
    player.fsm:doEvent("walkAction")--执行状态机的动作

   --1
    cc.ui.UIPushButton.new()
            :setButtonLabel(cc.ui.UILabel.new({text = "walk", size = 32, color = display.COLOR_WHITE}))
            :onButtonClicked(function()
                print("1");
                if player.fsm:canDoEvent("walkAction") then--判断是否可以执行该状态
                    print("1")
                    player.fsm:doEvent("walkAction")
                end
            end)
            :align(display.CENTER, 50, 100)
            :addTo(self)
    --2
    cc.ui.UIPushButton.new()
            :setButtonLabel(cc.ui.UILabel.new({text = "hurt", size = 32, color = display.COLOR_WHITE}))
            :onButtonClicked(function()
                print("2");
                if player.fsm:canDoEvent("hurtAction") then
                    player.fsm:doEvent("hurtAction")
                end
            end)
            :align(display.CENTER, 150, 100)
            :addTo(self)

    --3
            cc.ui.UIPushButton.new()
            :setButtonLabel(cc.ui.UILabel.new({text = "dead", size = 32, color = display.COLOR_WHITE}))
            :onButtonClicked(function()
                print("3");
                if player.fsm:canDoEvent("deadAction") then
                    player.fsm:doEvent("deadAction")
                end
            end)
            :align(display.CENTER, 250, 100)
            :addTo(self)
    --4
            cc.ui.UIPushButton.new()
            :setButtonLabel(cc.ui.UILabel.new({text = "attackA", size = 32, color = display.COLOR_WHITE}))
            :onButtonClicked(function()
                print("4");
                if player.fsm:canDoEvent("attackAAction") then
                    player.fsm:doEvent("attackAAction")
                end
            end)
            :align(display.CENTER, 350, 100)
            :addTo(self)

     --5
            cc.ui.UIPushButton.new()
            :setButtonLabel(cc.ui.UILabel.new({text = "attackb", size = 32, color = display.COLOR_WHITE}))
            :onButtonClicked(function()
                print("5");
                if player.fsm:canDoEvent("attackBAction") then
                    player.fsm:doEvent("attackBAction")
                end
            end)
            :align(display.CENTER, 450, 100)
            :addTo(self)
    

end

function MainScene:onEnter()
end

function MainScene:onExit()
end

return MainScene

quick-cocos2dx 骨骼动画制作 使用dragonbones插件

本人小菜鸟第一次写博客,写的不好请大婶勿喷 公司的项目要用骨骼动画,以前没有接触过骨骼动画就在quick群里问了下怎么做。还好有人回我,并且给了我一个博客地址。http://zengrong.net...
  • zuihoudeliulang
  • zuihoudeliulang
  • 2014年02月28日 20:53
  • 3864

骨骼动画详解 和 帧动画

 骨骼动画 vs. 精灵表(sprite sheets)   创建动画又快又简单的方法是使用“精灵表”(sprite sheets).当你意识到游戏需要大量动画,内存消耗会涨上来,而且需要耗...
  • caojunhao123
  • caojunhao123
  • 2014年03月11日 19:56
  • 2502

Cocos2dx v3.2骨骼动画加载学习

一、使用Cocos Studio之前需要导入GUI、Extensions、CocosStudio的类库 右击解决方案选择添加现有项目添加这三个库文件导入成功效果如下 二、选择工程右...
  • duke5027
  • duke5027
  • 2014年12月04日 11:23
  • 2109

cocos2d-x骨骼动画使用实例

cocos2d-x骨骼动画使用实例
  • qq_32319583
  • qq_32319583
  • 2016年12月05日 19:43
  • 1229

导出数据在代码中加载-骨骼动画在cocos中加载

使用cocos v2.x发布的CSB资源更换了加载方式,需要用CSLoader来加载。目前的cocos支持的语言有C++、js、lua, 编辑器默认导出的格式为csb、json,下面来分语言介绍如何在...
  • Anzhongliu
  • Anzhongliu
  • 2016年07月01日 00:15
  • 1406

骨骼动画原理与前端实现浅谈

骨骼动画原理与前端实现浅谈 作者: 叶斋 发表于: 2015-11-30 人的运动——走,跑,跳,是由骨骼带动躯干和四肢完成的。「骨骼动画」,顾名思义,就是模拟骨骼运动的机制而...
  • cdnight
  • cdnight
  • 2016年02月24日 17:19
  • 3084

骨骼动画原理及简单实现

骨骼动画的含义,一句话,骨骼的朝向和位置,影响顶点的位置。 骨骼动画的计算方法,一句话,顶点在骨骼空间里的坐标,不受骨骼本身变化影响。 因此,我们只要先将顶点从模型空间变换到骨骼空间,在骨骼发生旋转位...
  • cbbbc
  • cbbbc
  • 2015年04月29日 20:13
  • 1148

Cocos2d-x 3.0开发(六)使用cocoStudio创建一个骨骼动画

概述:虽然我们已经会使用静态的UI控件了,但还远远不够,接下来我们再研究一下动画的使用...... 先上图:...
  • fansongy
  • fansongy
  • 2013年10月18日 21:40
  • 40959

cocos2d-x 骨骼动画详解

骨骼动画 vs. 精灵表(sprite sheets)   创建动画又快又简单的方法是使用“精灵表”(sprite sheets).当你意识到游戏需要大量动画,内存消耗会涨上来,而且需要耗时去加载所有...
  • zhanghefu
  • zhanghefu
  • 2014年02月25日 20:25
  • 8605

【游戏开发】骨骼动画详解

骨骼动画详解 原文地址:http://blog.csdn.net/ccx1234/article/details/6641944   骨骼蒙皮动画(Skinned Mesh)的原理解析(一) ...
  • chenwu_843402773
  • chenwu_843402773
  • 2013年03月04日 23:10
  • 2731
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:quick-3.3学习笔记之状态机及骨骼动画的使用
举报原因:
原因补充:

(最多只允许输入30个字)