您的位置:首页 > 移动开发 > Cocos引擎

基于COCOS2D-X的lua版打怪减血特效

2014-02-21 18:40 549 查看
打怪减血特效是游戏最常见的一种,我看了http://www.cnblogs.com/zisou/p/cocos2d-x-demo1.html的BOLG,也写了个LUA版。

function createbleed( num )

local ori_bleed_png = CCTextureCache:sharedTextureCache():addImage("bleed.png");--内容为-0123456789
local X = ori_bleed_png:getContentSize().width;--得到图的总宽
local Y = ori_bleed_png:getContentSize().height;
local x = X/11;

local stack ={} ;--哈哈 这里像数组一样用它
local len = 0;--num的位数啦
while true do
if num < 1  then--当num=0时 各位数都存在stack了
break;
end
local i = num%10;
num = (num-i) / 10;--它奶奶的 lua /这个运算不像c++ 159/10=15.9
len = len + 1;
stack[len] = i;
end

local rect  = CCRectMake(0,0,x,Y);
local frame0 = CCSpriteFrame:createWithTexture(ori_bleed_png,rect);--得到第一个符号
local shownum = CCSprite:createWithSpriteFrame(frame0)--应该是到这里才变成精灵
shownum:setPosition(115,115)
for  j=1,len do
i = stack[j];
rect = CCRectMake(x*(1+i),0,x,Y);
frame0 = CCSpriteFrame:createWithTexture(ori_bleed_png,rect);
local lonenum = CCSprite:createWithSpriteFrame(frame0);
lonenum:setPosition(shownum:getContentSize().width*(len-j+1),shownum:getContentSize().height*0.5);--这里要注意了  你add在谁哪里这个位置就是相对谁的(0,0)
lonenum:setTag(1000+j);--一般的动作会跟着父结点除了淡出 下面for用到
shownum:addChild(lonenum,j);--把新的数字加到原图
end

local action1 = CCFadeIn:create(1)
local action2 = CCFadeOut:create(2)--下面的for循环不能省这句,否则只是最后一次循环有响应此动作 一个动作只能用一次?!
local actionBy = CCMoveBy:create(2, ccp(0, 50))
shownum:runAction(CCSequence:createWithTwoActions(action1,actionBy))--子结点也可以移动
shownum:runAction(action2)
for i=1,len do
action2 = CCFadeOut:create(2)--这里不能省的 折腾我好久
shownum:getChildByTag(1000+i):runAction(action2)--所有结点都淡出
end

return shownum;

end
哈哈 直接在hellolua代码里调用 就是

local bgMusicPath = CCFileUtils:sharedFileUtils():fullPathForFilename("background.mp3")
SimpleAudioEngine:sharedEngine():playBackgroundMusic(bgMusicPath, true)
local effectPath = CCFileUtils:sharedFileUtils():fullPathForFilename("effect1.wav")
SimpleAudioEngine:sharedEngine():preloadEffect(effectPath)

-- run
local sceneGame = CCScene:create()
sceneGame:addChild(createLayerFarm())
sceneGame:addChild(createLayerMenu())
sceneGame:addChild(createbleed(15948615670))--这一句才是调用特效的
CCDirector:sharedDirector():runWithScene(sceneGame)


简单地贴个效果图吧

咦这里所见非所得 图不见了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: