cocos2dx 动画翻转

2015年01月16日 09:54 0 点赞 0 评论 更新于 2025-11-21 14:30

本文将展示如何使用 Lua 语言在 Cocos2d-x 中实现动画翻转效果。代码中涉及到以下 Cocos2d-x 类:

  • CCAnimation:补间动画
  • CCAnimate:动画
  • CCDelayTime:延迟动作
  • CCFadeTo:设置透明度
  • CCSequence:动作序列
  • CCSpawn:让精灵的若干个动画同时执行
  • CCRepeatForever:无限循环
  • CCCallFuncN:瞬时动作中的节点回调函数
  • CCMoveTo:移动动作

使用 Lua 编写 Cocos2d-x 代码非常方便,下面直接看代码,这些类的具体用法可以在网上搜索到大量资料。

-- 获取窗口大小
local winSize = CCDirector:sharedDirector():getWinSize()

-- 创建一个带有颜色的层
local layer = CCLayerColor:create(ccc4(0, 0, 0, 111), winSize.width, winSize.height)

-- 加载运动过程中的动画,使用 TexturePacker 生成的 plist 文件
local cache = CCSpriteFrameCache:sharedSpriteFrameCache():addSpriteFramesWithFile("plist文件")

-- 创建一个数组用于存储精灵帧
local array = CCArray:create()
-- 假设 n 是帧的数量
local n = 10
for i = 1, n do
local path = string.format("%d.png", i)
local name = CCSpriteFrameCache:sharedSpriteFrameCache():spriteFrameByName(path)
array:addObject(name)
end

-- 创建动画
local animation = CCAnimation:createWithSpriteFrames(array)

-- 示例:使用 table 来设计动画信息
--[[
local info = {
{ pointx = 1, pointy = 2 },
{ pointx = 1, pointy = 2 }
}
for j = 1, #info do
local info1 = info[j]
local x = info1.pointx
local y = info1.pointy
end
]]

-- 运动动画
for j = 1, 10 do
-- 设置帧动画的延迟时间
animation:setDelayPerUnit((math.random(5, 10)) / 70)
-- 设置动画结束后恢复原始帧
animation:setRestoreOriginalFrame(true)

-- 创建动画动作
local animate = CCAnimate:create(animation)
animate:setTag(0)

-- 创建精灵
local sprite = CCSprite:create("图片文件,这里是跟 plist 文件名一样的名字哟")
-- 计算偏移量
local offset = j * math.random(-1, 1)
-- 这里的 x, y 你需要自己定义
local x = 100
local y = 200
sprite:setPosition(ccp(x + offset, y))
sprite:setScale(1.2)
layer:addChild(sprite)

-- 创建移动动作的数组
local arraymove = CCArray:create()
-- 根据需要设置延时
arraymove:addObject(CCDelayTime:create(j * 0.1))
-- 创建移动动作
local moveto = CCMoveTo:create(0.8, ccp(x + offset, y))

-- 创建透明度变化动作的数组
local arrayFade = CCArray:create()
local delayFade = CCDelayTime:create(0.8)
-- 在 0.05 秒内变为不透明
local fade = CCFadeTo:create(0.05, 0)
arrayFade:addObject(delayFade)
arrayFade:addObject(fade)
local actionFade = CCSequence:create(arrayFade)

-- 让精灵的移动和透明度变化动画同时执行
local spawn = CCSpawn:createWithTwoActions(moveto, actionFade)
arraymove:addObject(spawn)
local action = CCSequence:create(arraymove)

-- 精灵运行动画
sprite:runAction(CCRepeatForever:create(animate))
sprite:runAction(action)
end

-- 获取当前运行的场景
local scene = CCDirector:sharedDirector():getRunningScene()
scene:addChild(layer, 100)

-- 创建延迟销毁动作的数组
local arrayend = CCArray:create()
-- 延迟时间
arrayend:addObject(CCDelayTime:create(2))
arrayend:addObject(CCFadeTo:create(0.1, 0))
-- 这里 removeLayer 是一个函数
arrayend:addObject(CCCallFuncN:create(removeLayer))
local endAction = CCSequence:create(arrayend)
layer:runAction(endAction)

-- 移除层的函数
function removeLayer(n)
n = tolua.cast(n, "CCNode")
n:removeFromParentAndCleanup(true)
end

以上代码实现了在 Cocos2d-x 中使用 Lua 进行动画翻转的效果,通过加载动画帧、创建动画动作、设置精灵的移动和透明度变化等操作,最终实现了动画的无限循环和层的延迟销毁。