Cocos2d Lua 入門小例子 一個記憶力遊戲,cocos2dlua
1.遊戲說明
一個"記憶"類的比賽遊戲。你和電腦對戰,輪到誰的回合,誰翻兩張牌,如果兩張牌一樣,就消掉這兩張牌,得2分,可以繼續翻牌,如果兩張牌不一樣,就換一個人。直到最後,看誰的得分高。
遊戲設計思想可以看這篇文章《Cocos2d 遊戲狀態機器》
2. Lua 簡單物件導向
我們知道Lua是指令碼語言,不是真正物件導向語言。但是物件導向好像能讓代碼結構更加合理,Javascript, Lua都可以類比出物件導向。Lua物件導向還有超多種方式實現,這裡當然不一一介紹。簡單來看個繼承Sprite的寫法。抄官方的。
MatchCard = class("Match",function (spriteFrameName, value) MatchCard.value = value //--屬性 return cc.Sprite:createWithSpriteFrameName("MatchCardBg.png")end)MatchCard.test= true //--屬性 //--一個方法function MatchCard:containsTouchLocation(x,y)local position = cc.p(self:getPosition())local s = self:getContentSize() local touchRect = cc.rect(-s.width / 2 + position.x, -s.height / 2 + position.y, s.width, s.height) local b = cc.rectContainsPoint(touchRect,cc.p(x,y)) return bend//--new 一個對象,當然這跟c++的那種不一樣的local card = MatchCard.new()//--調用方法card:containsTouchLocation()
3.Cocos Code Ide 建立Lua項目
我這遊戲是用Cocos Code Ide 建立的,還算順利。API參考Lua-Tests就行了。整體是一樣的。還沒玩過Quick cocos2d-x。
4.cocos2d lua 使用感受
使用Cocos2d-x的C++編程感覺是最舒服的,雖然C++文法有寫難,但不容易遇到很奇怪的Bug,就是編譯速度太慢了,跟策劃不好合作,像Js,和Lua,你定義好一些寫法,策劃直接也可以寫Js和Lua,C++就不行了。還有Cocos2d-x C++ 能用上最新版本,移植Android和IOS沒什麼問題。還有Cocos2d-x C++感覺能寫出較高品質的代碼。還有VS2012非常好用。
Lua,JS都是指令碼語言,用來開發遊戲速度快很多。不需要編譯。就是習慣了C++那種條條框框的物件導向後,寫Lua,JS的物件導向總怪怪的。Debug有時候相對C++比較困難。cocos2d JS還是用WebStorm編寫比較爽。Cocos Code Ide 跟VS2012和WebStorm還有差距,某些方面因為是整合Cocos的遊戲架構,所以某些方面比較好用。
5.動態圖以及項目源碼下載
我對Lua使用比較少,感覺寫的比較差,太多全域變數。項目:
http://www.waitingfy.com/?attachment_id=1291
exe可以直接運行在/runtime/win32/MatchGame.exe,不支援XP,Win7應該可以。
http://www.waitingfy.com/archives/1289
LUA與Cocos2d的問題
spriteCrop 設定一個tag 在 deleteCorp() 中進行 刪除。
local frameCrop = CCSpriteFrame:create("crop.png", CCRectMake(0, 0, 105, 95))
for i = 0, 3 do
for j = 0, 1 do
local spriteCrop = CCSprite:createWithSpriteFrame(frameCrop);
spriteCrop:setPosition(10 + 200 + j * 180 - i % 2 * 90, 30 + 10 + i * 95 / 2)
layerFarm:addChild(spriteCrop)
--設定tag
spriteCrop:setTag(i)
end
end
function deleteCorp()
-- 按照上面設定的tag 擷取 xxx
local spr = layerFarm:getChildByTag(xxxxx)
spr:setVisible(false)
end
教大家一個問題對於cocos2d-x的lua項目移植android問題
build_native.sh