quick-3.3学习笔记之状态机及骨骼动画的使用
来源:互联网 发布:女生双肩包推荐 知乎 编辑:程序博客网 时间:2024/06/06 04:11
此博客仅作为自己的学习总结使用
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-3.3学习笔记之状态机及骨骼动画的使用
- quick StateMachine 状态机的使用
- COCOS学习笔记--骨骼动画
- quick-cocos2dx 骨骼动画制作 使用dragonbones插件
- quick-cocos2dx 骨骼动画换装
- quick-lua创建骨骼动画
- Direct9学习之--------------------------动画<骨骼动画>
- Ogre学习笔记(8):骨骼动画
- Direct-X学习笔记--骨骼动画
- Direct-X学习笔记--骨骼动画进阶
- Unity动画,状态机的使用
- 学习笔记(4):状态机与动画结合
- quick-cocos2d-x 学习系列之十五 状态机
- quick-cocos2d-x spine 骨骼动画(1)
- quick-cocos2d-x spine 骨骼动画(2)
- cocoStudio工具的使用-----骨骼动画编辑
- [OpenGL] 使用Assimp库的骨骼动画
- CVP认证学习笔记--李天宇023使用animationEditor编辑骨骼动画
- 分类的IP地址
- iBATIS教程之入门浅析
- 苹果用户系统挂载点。
- 在windows环境下将基于FFMpeg和SDL的播放器集成到Qt creator中
- 遇到了一个C++的小问题,百度了一下
- quick-3.3学习笔记之状态机及骨骼动画的使用
- POI 操作excel注意事项
- mysql_fetch_assoc
- ZOJ 3469(区间DP)
- Android 内部存储,外部存储使用范围和介绍
- 图——图的自建算法库
- cloudstack guestnetwork vpc ingress/ergess介绍
- 浮点数
- JAVA 12.8(Swing common features)