第一个Cocos2d-x Lua游戏,第一个cocos2d-xlua
我们的编写的第一个Cocos2d-x Lua程序,命名为HelloLua,从该工程开始学习其它的内容。创建工程我们创建Cocos2d-x Lua工程可以通过Cocos2d-x提供的命令工具cocos实现,但这种方式不能与Cocos Code IDE集成开发工具很好地集成,不便于程序编写和调试。由于Cocos Code IDE工具是Cocos2d-x开发的专门为Cocos2d-JS和Cocos2d-x Lua开发设计的,因此使用Cocos Code IDE工具很方便创建Cocos2d-x Lua工程。首先我们需要在Cocos Code IDE工具中先配置Lua框架,打开Cocos Code IDE工具,选择菜单Window→Preferences,弹出对话框如图所示,选择Cocos→Lua在右边的Lua Frameworks中选择<Cocos2d-x引擎目录>。配置Lua框架Lua框架配置不需要每次都进行,只是在最开始的配置一下,但创建工程的时候,Cocos Code IDE工具会从这个Lua框架目录中创建工程文件。接下来我们就可以创建Lua工程了,选择菜单File→New→Project,如下图所示,弹出项目类型选择对话框。项目类型选择对话框我们选中Cocos Lua Project,然后点击Next按钮,弹出如下图所示的对话框。我们在Project Name项目中输入工程名称,Create Project in Workspace是在Workspace目录中创建工程,我们需要选中该项目,Create From Existing Resource项目选中可以让我们从已经存在的工程创建,现在我们不需要选中该项目。选择完成点击Next按钮进入到如图所示配置运行环境对话框,在该对话框中我们可以配置项目运行时信息。Orientation项目是配置模拟器的朝向,其中landscape是横屏显示,portriat是竖屏显。Desktop Runtime Settings中的Title是设置模拟器的标题,Desktop Windows initialize Size是设置模拟器的大校Add Native Codes是设置添加本地代码到工程,在本来中我们不需要添加本地代码。最后点击Finish按钮完成创建操作,创建好工程之后,如后图所示。新建项目对话框配置运行环境对话框创建工程成功界面Cocos Code IDE中运行创建好工程后我们可以测试一下,在左边的工程导航面板中选中HelloLua工程,右键菜单中选择Run As→Cocos luainding运行我们刚刚创建的工程,运行结果如下图所示。运行工程界面我们主要编写的程序代码是在src目录下,在本例中Lua 文件负责处理主要的场景界面逻辑。如果我们想调试程序,可以设置断点,如下图所示,点击行号之前的位置,设置断点。设置断点调试运行过程,右键菜单中选择Debug As→Cocos Luabinding菜单。如下图所示,程序运行到第31行挂起,并进入调试视图,在调试视图中我们可以查看程序运行的堆栈、变量、断点、计算表达式和单步执行程序等操作。运行到断点挂起工程文件结构我们创建的HelloLua工程已经能够运行起来了,下面我们介绍一下HelloLua工程中的文件结构,我们使用Cocos Code IDE打开HelloLua工程,左侧的导航面板如下图所示。HelloLua工程中的文件结构在上图所示导航面板中,res文件夹存放资源文件的,src文件夹是主要的程序代码main.lua和GameScene.lua,其中main.lua是程序入口文件,Cocos2d-x会在底层绑定该文件,并且启动和运行它。GameScene.lua中实现了游戏场景。代码解释HelloLua工程中主要有两文件下面我们详细解释一下它们内部的代码: 1、main.lua文件main.lua是程序入口文件代码如下:require "Cocos2d" ①
-- cclog
local cclog = function(...) ②
print(string.format(...)) ③
end
-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg) ④
cclog("----------------------------------------")
cclog("LUA ERROR: " .. tostring(msg) .. "\n")
cclog(debug.traceback())
cclog("----------------------------------------")
return msg
end
local function main() ⑤
collectgarbage("collect") ⑥
-- avoid memory leak
collectgarbage("setpause", 100) ⑦
collectgarbage("setstepmul", 5000) ⑧
cc.FileUtils:getInstance():addSearchPath("src")
cc.FileUtils:getInstance():addSearchPath("res")
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(480, 320, 0)
--create scene
local scene = require("GameScene") ⑨
local gameScene = scene.create() ⑩
gameScene:playBgMusic()
if cc.Director:getInstance():getRunningScene() then