最近在学习lua 网上很少有lua相关的游戏资料 基本上都是JS版本的或者quick版本的
去官网下载了cocos code ide 发现很好用 赞一个~
好多问题不知道则么办 问了群里的朋友啊 各种问题也得到了解决
就拿2048练练手
游戏截图如下
2048能学到好多东西
1,显示对象的添加
2,menuItem的应用
3,类的定义 以及 类的属性和方法调用
function GameScene:createLayer()
--当前屏幕高度和宽度
size = cc.Director:getInstance():getVisibleSize()
--背景色
local bg = cc.LayerColor:create(cc.c4f(180,170,160,255))
self:addChild(bg)
--标题label
local titleLabel = LabelUtils:createLabel("2048",30)
self:addChild(titleLabel)
titleLabel:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y-30) )
--分数label
scoreLabel = LabelUtils:createLabel("score:0",30)
self:addChild(scoreLabel)
scoreLabel:setPosition( cc.p(VisibleRect:center().x, titleLabel:getPositionY()-30) )
--绘制表格
self:initGrid()
--初始化卡片
self:initCard()
--重新游戏事件
local function restartCallBack(tag, sender)
print("restartCallBack")
self:resetGame()
end
--重新游戏按钮
local restartItem = cc.MenuItemFont:create("restart");
restartItem:setColor(cc.c4f(22,100,255,1));
restartItem:setPosition(VisibleRect:center().x,VisibleRect:bottom().y+100)
restartItem:registerScriptTapHandler(restartCallBack)
local restartMenu = cc.Menu:create(restartItem);
restartMenu:setPosition(0,0)
self:addChild(restartMenu);
--结束label
gameOverLabel = LabelUtils:createLabel("Game Over",30)
gameOverLabel:setColor(cc.c4f(255,0,255,1));
gameOverLabel:setPosition(VisibleRect:center().x,VisibleRect:center().y)
gameOverLabel:setVisible(false)
self:addChild(gameOverLabel);
--通关label
local passTheGameLabel = LabelUtils:createLabel("Success!",30)
passTheGameLabel:setColor(cc.c4f(255,255,0,1));
passTheGameLabel:setPosition(VisibleRect:center().x,VisibleRect:center().y)
passTheGameLabel:setVisible(false)
self:addChild(passTheGameLabel);
-- 触摸事件
local function onTouchBegan(touch, event)
BeginPos = touch:getLocation()
--网上都说这里一定要返回为true才行 具体不是很清楚为什么
return true
end
local function onTouchMoved(touch, event)
end
local function onTouchEnd(touch, event)
local location = touch:getLocation()
local nMoveY = location.y - BeginPos.y
--判断触摸的方向 根据坐标来判断
if (location.x - BeginPos.x > 50) then
self:rightCombineNumber();
elseif (location.x - BeginPos.x < -50) then
self:leftCombineNumber();
elseif (location.y - BeginPos.y > 50) then
self:upCombineNumber();
elseif (location.y - BeginPos.y < -50) then
self:downCombineNumber();
end
end
--触摸层添加 并且添加触摸事件
local layer = cc.Layer:create()
local listener = cc.EventListenerTouchOneByOne:create()
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED)
listener:registerScriptHandler(onTouchEnd,cc.Handler.EVENT_TOUCH_ENDED)
local eventDispatcher = layer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
self:addChild(layer,-1)
end
```
其实还是有很多疑问的 ~~~ 大家一起学习
关于2048的算法 也是网上参考的资料来写的
代码也添加了一些注释 希望能帮到学习lua的朋友
-------------------------------------- 分割线 ------------------------------------------
关于打包的问题~ 今天折腾了一下午 最后终于在群里朋友的帮助下 搞定了
要下载的东西 如下
我用的是win7 64位系统
http://dl.google.com/android/ndk/android-ndk-r9d-windows-x86_64.zip,1
http://dl.google.com/android/android-sdk_r23-windows.zip,1
下载后解压出来 ndk不用去管它 只要是sdk需要自己做一些事情
首先先改一下host 因为是从谷歌下载东西 很慢的 打开host添加以下内容
```
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com
```
sdk解压出来后 找到
SDK Manager 这个运行文件打开
下载图中的东东
然后用cocos code ide
窗口---- 首选项中 设置打包要用到的文件目录 如下图
如果大家打包失败 提示的内容是
Failed Android build: “error: relocation overflow in R_ARM_THM_CALL”
请尝试 修改以下内容(这是在网上看到的方法)
```
将下面这句话
LOCAL_ARM_MODE := arm
添加到下面这个文件里面去
/runtime-scr/proj.android/jni/Android.mk
/js-bindings/bindings/Android.mk
```



