Cocos2d-x Lua中實例:幀動畫使用


Cocos2d-x Lua中實例:幀動畫使用

 

下面我們通過一個實例介紹一下幀動畫的使用,這個實例如下圖所示,點擊Go按鈕開始播放動畫,這時候播放按鈕標題變為Stop,點擊Stop按鈕可以停止播放動畫。

幀動畫實例

下面我們再看看具體的程序代碼,首先看一下看GameScene.lua文件,它的代碼如下:

 

[html]  view plain copy
 
  1. local isPlaying = false -- 播放標識                                                                                                      ①  
  2. local size =cc.Director:getInstance():getWinSize()  
  3.    
  4. … …  
  5.    
  6. -- create layer  
  7. function GameScene:createLayer()  
  8.    
  9.    local layer = cc.Layer:create()  
  10.    
  11.    local spriteFrame  = cc.SpriteFrameCache:getInstance()  
  12.    spriteFrame:addSpriteFramesWithFile("run.plist")  
  13.    
  14.    local bg =cc.Sprite:createWithSpriteFrameName("background.png")  
  15.    bg:setPosition(cc.p(size.width/2, size.height/2))  
  16.    layer:addChild(bg)  
  17.    
  18.    local sprite = cc.Sprite:createWithSpriteFrameName("h1.png")  
  19.    sprite:setPosition(cc.p(size.width/2, size.height/2))  
  20.    layer:addChild(sprite)  
  21.    
  22.    --toggle菜單  
  23.    local goSprite = cc.Sprite:createWithSpriteFrameName("go.png")  
  24.    local stopSprite = cc.Sprite:createWithSpriteFrameName("stop.png")  
  25.    
  26.    local goToggleMenuItem = cc.MenuItemSprite:create(goSprite, goSprite)  
  27.    local stopToggleMenuItem = cc.MenuItemSprite:create(stopSprite,stopSprite)  
  28.    local toggleMenuItem = cc.MenuItemToggle:create(goToggleMenuItem,  
  29.                                                                              stopToggleMenuItem)  
  30.    toggleMenuItem:setPosition(cc.Director:getInstance():convertToGL(cc.p(930,540)))  
  31.    
  32.    local mn = cc.Menu:create(toggleMenuItem)  
  33.    mn:setPosition(cc.p(0, 0))  
  34.    layer:addChild(mn)  
  35.    
  36.    local function OnAction(menuItemSender)  
  37.    
  38.        if not isPlaying then  
  39.    
  40.             --///////////////動畫開始//////////////////////  
  41.             local animation =cc.Animation:create()                                                                         ②  
  42.             for i=1,4 do  
  43.                 local frameName =string.format("h%d.png",i)                                                       ③  
  44.                 cclog("frameName =%s",frameName)  
  45.                 local spriteFrame = spriteFrame:getSpriteFrameByName(frameName)               ④  
  46.                animation:addSpriteFrame(spriteFrame)                                                                 ⑤  
  47.             end  
  48.    
  49.            animation:setDelayPerUnit(0.15)          --設置兩個幀播放時間                      ⑥  
  50.            animation:setRestoreOriginalFrame(true)    --動畫執行后還原初始狀態           ⑦  
  51.    
  52.             local action =cc.Animate:create(animation)                                                         ⑧  
  53.             sprite:runAction(cc.RepeatForever:create(action))                                                       ⑨  
  54.             --//////////////////動畫結束///////////////////  
  55.             isPlaying = true  
  56.        else  
  57.             sprite:stopAllActions()                                                                                                      ⑩  
  58.             isPlaying = false  
  59.        end  
  60.    end  
  61.    toggleMenuItem:registerScriptTapHandler(OnAction)  
  62.    
  63.    return layer  
  64. end  
  65.    
  66. return GameScene  

上述代碼第①行是聲明一個布爾變量isPlaying,用來保存播放狀態,true時候說明正在播放,false時候說明停止播放。

第②行代碼是創建一個Animation對象,它是動畫對象,然后我們要通過循環將各個幀圖片放到Animation對象中。第③行是獲得幀圖片的文件名,string.format("h%d.png",i)是對字符串進行格式化。第④行代碼是通過幀名創建精靈幀對象,第⑤行代碼把精靈幀對象添加到Animation對象中。

第⑥行代碼是animation:setDelayPerUnit(0.15)是設置兩個幀播放時間,我們這個動畫播放是4幀。第⑦行代碼animation:setRestoreOriginalFrame(true)是動畫執行完成是否還原到初始狀態。第⑧行代碼是通過一個Animation對象創建Animate對象,第⑨行代碼cc.Animate:create(animation)是執行動畫動作,無限循環方式。

第⑩行代碼sprite:stopAllActions()停止所有的動作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM