学习了一下lua 写了一个lua版本的2048

最近在学习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


```

我有一些问题 大家看我的这个card类
里面的 nameLabel 需要在外部对它的值做一些修改
我现在的办法就是Card.nameLabel 一开始在Card中定义好 这有在对外的方法中 就能通过self.nameLabel对它进行操作
我不知道这种方式是否正确 如果不正确 希望朋友告诉我正确的方式 谢谢

赞一个,后面也准备学学lua

自己顶 嘿嘿~~~

好详细!:7:

感谢分享!!!

感谢分享,请收下我的膝盖.