cocos2dx lua 如何接入sdk本文将只介绍Lua版本。C++先放一边,还有,现在的Cocos Code IDE已经能够将你的项目刷到真机上测试了!!

本文对应的引擎版本和工具:

Cocos2d-x 3.2 (不要3.0与3.2混用)(点击下载

Cocos Code IDE Build:V1.0.0.RC0(点击下载

Visual Studio 2012 - 用来创建自定义runtime


环境配置如图,Windows环境变量的设置从略

以下步骤可以在Cocos Code IDE中运行Lua-test,并Package to APK 装到真机上测试

  1. 进入Cocos Code IDE,在项目管理其空白处右击,选择Cocos Lua Project创建新项目。

  2. 输入一个你想要的非 nil名字,点击下一步,勾选Add Native Codes,点击Finish,IDE会用内置的项目模板给你生成原始项目

  3. 此时打开你的workspace,找到你的项目,会有这几个文件夹:.settings , frameworks,res,runtime,src。

  4. 接下来:删除src,res文件夹下的所有文件

  5. 找到你的Cocos2d-x 3.2,一次进入test→lua-tests。里面有project,res,src三个文件夹,30个.lua文件,一个.cocos-project.json文件

  6. 现在,将30个.lua文件复制到你项目的 根文件夹下,然后将res,src中的文件都复制到你项目对应的文件夹中

  7. 进到你项目src文件夹,里面有48个Test文件夹和这几个.lua文件:controller.lua  ,helper.lua  ,mainMenu.lua ,testResource.lua ,VisibelRect.lua。将controlle.lua重命名为main.lua。

  8. 回到Cocos Code IDE,刷新项目,就能在项目目录中看到上面提到的所有文件了。然后,选中项目,右键 → Run As → Cocos Luabinding运行

到这一步,已经在PC上面完成。


下面上图,刷到真机上:

1407374647876139.png

1407374659579077.png

1407374670637348.png

后一步,连接你的设备到电脑,点击Refresh,找到你设备之后,Refresh会变成Install,点击即可。


还可以点击Open Package Location好到你的apk文件。


刷到你的手机里面,随时感受Cocos2d-x的魅力吧。


下面是本文“主题” - 加速器

在Cocos Code IDE一次找到src → AccelerometerTest - 打开AccelerometerTest.lua 就会见到下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
--[[
         每一个test文件是一个Scene,该Scene中包含多个小test,每个test是一个层,主框架是一个Layer,包含主界面菜单,封装了所有Scene都用得到的基本功能
]]--
 
local function AccelerometerMainLayer()
 
    local function title()
      return "AccelerometerTest"
    end
    local layer = cc.Layer:create()
 
    local function onEnter()
        --首先设置layer的可加速属性为true,对layer启用加速器
        layer:setAccelerometerEnabled(true)
 --[[ 
这个是设置测试的标题:ttf字体标签,
显示内容:title()方法返回的字符串,
字体文件:fonts/arial.ttf
字体大小:32
添加到层中,设置锚点和坐标
]]--
        local label = cc.Label:createWithTTF(title(), "fonts/arial.ttf", 32)
        layer:addChild(label, 1) 
        label:setAnchorPoint(cc.p(0.5, 0.5))
        label:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 50) )
         
        --生成小球 - Sprite
        local ball = cc.Sprite:create("Images/ball.png")
        --设置初始位置
        ball:setPosition(cc.p(VisibleRect:center().x, VisibleRect:center().y))
        layer:addChild(ball)
 
        local function accelerometerListener(event,x,y,z,timestamp)
        --[[
                         加速事件发生时,会传出多个参数:event,x,y,z,timestamp
                         event:被绑定的物件发出的加速器事件,可以用getCurrentTarget()获取事件的发送者
                         x,y,z:加速器传递的的坐标
        ]]--
            --获取ball
            local target  = event:getCurrentTarget()
            --获取尺寸
            local ballSize = target:getContentSize()
             
            --获取小球初始坐标,存入ptNowX,ptNowY中,并配合加速器传来的坐标x,y进行一系列计算
            local ptNowX,ptNowY    = target:getPosition()
            ptNowX = ptNowX + x * 9.81
            ptNowY = ptNowY + y * 9.81
             
            --设置小球活动的时候x坐标的范围
            local minX  = math.floor(VisibleRect:left().x + ballSize.width / 2.0)
            local maxX  = math.floor(VisibleRect:right().x - ballSize.width / 2.0)
            --进行简单的碰撞判定
            if ptNowX <   minX then
                ptNowX = minX
            elseif ptNowX > maxX then
                ptNowX = maxX
            end
            --设置小球活动的时候y坐标的范围
            local minY  = math.floor(VisibleRect:bottom().y + ballSize.height / 2.0)
            local maxY  = math.floor(VisibleRect:top().y   - ballSize.height / 2.0)
            if ptNowY <   minY then
                ptNowY = minY
            elseif ptNowY > maxY then
                ptNowY = maxY
            end
            --将计算后的ptNowX,ptNowY设置给小球   因为ptNowX,ptNowY与加速器坐标x,y相关,是动态的,所以小球会随加速器动起来
            target:setPosition(cc.p(ptNowX , ptNowY))
        end
        --onEnter()方法入口,注册加速事件侦听器,accelerometerListener()方法定义了事件发生时触发的相关操作(逻辑,动作。。)
        local listerner  = cc.EventListenerAcceleration:create(accelerometerListener)
        --与ball的事件调度器绑定   --不了解cocos2d-x事件调度机制的人,留言交流
        layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listerner,ball)
    end
 
    local function onExit()
        layer:setAccelerometerEnabled(false)
    end
     
    --载入节点的时候,引擎自动调用onEnter(),开始布局和启用加速器
    --退出的时候,调用onExit(),关闭加速器(仅对本层 关闭
    local function onNodeEvent(event)
        if "enter" == event then
            onEnter()
        elseif "exit" == event then
            onExit()
        end
    end
    --首先给layer注册节点事件,这里是读代码的入口
    layer:registerScriptHandler(onNodeEvent) 
    return layer
end
 
function AccelerometerMain()
    cclog("AccelerometerMain")
    local scene = cc.Scene:create()
    scene:addChild(AccelerometerMainLayer())
    scene:addChild(CreateBackMenuItem())
    return scene
end