基于cocos2d-x的spine动画残影拖尾效果
在游戏研发过程中,残影拖尾效果是有一定需求的。
本例使用RenderTexture类实现残影效果,基于quick-3.3
MainScene.lua 主要是用来加载Spine动画,处理触摸拖动
local ShadowUtil = require("app.shadow.ShadowUtil") local MainScene = class("MainScene", function() return display.newScene("MainScene") end) function MainScene:ctor() local layer = display.newColorLayer(cc.c4b(255, 255, 255,0)) self:addChild(layer) self.calcTime = 0 local skeletonNode = sp.SkeletonAnimation:create("spine/spineboy.json", "spine/spineboy.atlas", 0.6) skeletonNode:setScale(0.5) local windowSize = cc.Director:getInstance():getWinSize() skeletonNode:setPosition(cc.p(windowSize.width / 2, 20)) skeletonNode:setAnimation(0, "walk", true) self:addChild(skeletonNode,1) local touchBeginPoint = nil local function onTouchBegan(touch, event) local location = touch:getLocation() print("onTouchBegan: %0.2f, %0.2f", location.x, location.y) touchBeginPoint = {x = location.x, y = location.y} return true end local function onTouchMoved(touch, event) local location = touch:getLocation() if touchBeginPoint then local cx, cy = skeletonNode:getPosition() skeletonNode:setPosition(cx + location.x - touchBeginPoint.x, cy + location.y - touchBeginPoint.y) touchBeginPoint = {x = location.x, y = location.y} self.calcTime = self.calcTime + 1 if self.calcTime == 10 then self.calcTime = 0 local shadow = ShadowUtil.new() shadow:addGhost(skeletonNode) end end end local function onTouchEnded(touch, event) local location = touch:getLocation() print("onTouchEnded: %0.2f, %0.2f", location.x, location.y) touchBeginPoint = nil end local listener = cc.EventListenerTouchOneByOne:create() listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN ) listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED ) listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED ) local eventDispatcher = layer:getEventDispatcher() eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer) end function MainScene:onEnter() end function MainScene:onExit() end return MainScene
ShadowUtil.lua用来生成残影,并且加入渐隐的动作,最后移除掉残影
-- local ShadowUtil = class("ShadowUtil") function ShadowUtil:ctor() -- body end --加残影 --node 节点 --deltime 间隔生成时间 function ShadowUtil:addGhost(node,deltime) local size = node:getBoundingBox() local posx,posy = node:getPosition() -- dump(size) print("pox:"..posx.." posy:"..posy) if size.width < 1 then return end local canvas = cc.RenderTexture:create(size.width,size.height) node:setPosition(size.width/2,0) canvas:begin() node:visit() canvas:endToLua() cc.Director:getInstance():getRenderer():render() node:setPosition(posx,posy) local ghostSp = cc.Sprite:createWithTexture(canvas:getSprite():getTexture()) ghostSp:setAnchorPoint(0.5,0) ghostSp:setPosition(posx, posy) ghostSp:setFlippedY(true); local fade = cc.Sequence:create(cc.FadeTo:create(1.0, 0),cc.CallFunc:create(function () ghostSp:removeFromParent() end)) node:getParent():addChild(ghostSp) ghostSp:runAction(fade) end return ShadowUtil
在RenderTexture生成的Sprite的上还可以用blend之类的效果实现带颜色的影子或者白色半透明的影子之类的效果
注意:需要重新导出luabinding,包括Render类,还有Director的getRender。
感谢于小钗聚聚提供思路
分类:
cocos2d-x
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法