cocos2dx lua 如何接入sdk

2015年02月27日 10:28 0 点赞 0 评论 更新于 2017-05-09 01:04

本文将仅介绍 Lua 版本的接入方法,C++ 版本暂不涉及。目前,Cocos Code IDE 已支持将项目刷到真机上进行测试。

一、所需引擎版本和工具

  1. Cocos2d-x 3.2:请确保不要将 3.0 与 3.2 版本混用,可点击此处下载
  2. Cocos Code IDE Build:V1.0.0.RC0点击此处下载
  3. Visual Studio 2012:用于创建自定义 runtime。

关于 Windows 环境变量的设置,本文从略,环境配置可参考相关图示。

二、在 Cocos Code IDE 中运行 Lua - test 并打包到 APK 进行真机测试步骤

1. 创建新项目

进入 Cocos Code IDE,在项目管理器的空白处右键单击,选择“Cocos Lua Project”来创建新项目。输入一个非 nil 的项目名称,点击“下一步”,勾选“Add Native Codes”,然后点击“Finish”,IDE 会使用内置的项目模板生成原始项目。

2. 查看项目文件夹

此时打开 workspace,找到创建的项目,会看到以下几个文件夹:.settingsframeworksresruntimesrc

3. 清理项目文件

删除 srcres 文件夹下的所有文件。

4. 复制测试文件

找到 Cocos2d - x 3.2 目录,依次进入 test→lua - tests,该目录下有 projectressrc 三个文件夹,30 个 .lua 文件以及一个 .cocos - project.json 文件。将这 30 个 .lua 文件复制到项目的根文件夹下,再将 ressrc 文件夹中的文件分别复制到项目对应的 ressrc 文件夹中。

5. 重命名文件

进入项目的 src 文件夹,其中有 48 个 Test 文件夹以及 controller.luahelper.luamainMenu.luatestResource.luaVisibelRect.lua 这几个 .lua 文件。将 controller.lua 重命名为 main.lua

6. 运行项目

回到 Cocos Code IDE,刷新项目,此时项目目录中应能看到上述提到的所有文件。选中项目,右键选择“Run As → Cocos Luabinding”运行,至此已在 PC 上完成项目的初步运行。

7. 刷到真机测试

  • 连接设备到电脑,点击“Refresh”,找到设备后,“Refresh” 按钮会变为 “Install”,点击即可将项目安装到真机上。
  • 还可以点击 “Open Package Location” 找到生成的 APK 文件。

三、加速器相关代码解析

在 Cocos Code IDE 中依次找到 src → AccelerometerTest,打开 AccelerometerTest.lua 文件,以下是对该文件代码的详细解析:

--[[
每一个 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:加速器传递的坐标
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 listener = cc.EventListenerAcceleration:create(accelerometerListener)
-- 与 ball 的事件调度器绑定
layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listener, 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

以上代码实现了一个简单的加速器测试功能,通过监听加速器事件,控制小球在屏幕内随设备的倾斜而移动。在 onEnter 方法中启用加速器并注册事件监听器,在 onExit 方法中关闭加速器,确保资源的合理使用。

作者信息

boke

boke

共发布了 1025 篇文章