Cocos2dx lua 启动流程
cocos2dx 版本 3.x,工具 VS2013 + babelua插件 1.lua工具,babelua babelua下载地址:http://babelua.codeplex.com/,下载后点击安装就可以了 2.cocos2dx 创建lua工程 windows 7下,配置好cocos2dx环境后,使用命令行创建项目。 3.lua项目 bool AppDelegate::applicationDidFinishLaunching()
{
// set default FPS
Director::getInstance()->setAnimationInterval(1.0 / 60.0f);
// register lua module
auto engine = LuaEngine::getInstance();
ScriptEngineManager::getInstance()->setScriptEngine(engine);
lua_State* L = engine->getLuaStack()->getLuaState();
lua_module_register(L);
register_all_packages();
LuaStack* stack = engine->getLuaStack();
stack->setXXTEAKeyAndSign("2dxLua",strlen("2dxLua"),"XXTEA",strlen("XXTEA"));
//register custom function
//LuaStack* stack = engine->getLuaStack();
//register_custom_function(stack->getLuaState());
#if (COCOS2D_DEBUG > 0) && (CC_CODE_IDE_DEBUG_SUPPORT > 0)
// NOTE:Please don't remove this call if you want to debug with Cocos Code IDE
auto runtimeEngine = RuntimeEngine::getInstance();
runtimeEngine->addRuntime(RuntimeLuaImpl::create(),kRuntimeEngineLua);
runtimeEngine->start();
#else
//默认调用src/main.lua代码
if (engine->executeScriptFile("src/main.lua"))
{
return false;
}
#endif
return true;
}
与C++下的代码相比,原先的view 初始化,opgl参数初始化等都没有了,看样子都移交给了lua模块了。 4.关于创建VS lua项目的参数 Lua scripts folder:项目目录 从这里可以看到,我们首先需要个exe程序,很显然,cocos2dx C++模块就是一个框架exe,然互加载lua来执行不同的业务。直接运行MyLua1项目,会产生exe程序。 5.尝试修改lua脚本并运行 --调用app下的MyApp.lua的create():run()
local function main()
require("app.MyApp"):create():run()
end
local status,msg = xpcall(main,__G__TRACKBACK__)
if not status then
print(msg)
end
MyApp.lua local MyApp = class("MyApp",cc.load("mvc").AppBase)-- 继承cc.mvc.AppBase
function MyApp:onCreate()
math.randomseed(os.time())
end
return MyApp
packages/mvc/AppBase.lua --这里在MyApp:create()的时候调用
function AppBase:ctor(configs)
--注意下面的几个成员变量
self.configs_ = {
viewsRoot = "app.views",modelsRoot = "app.models",defaultSceneName = "MainScene",}
for k,v in pairs(configs or {}) do
self.configs_[k] = v
end
if type(self.configs_.viewsRoot) ~= "table" then
self.configs_.viewsRoot = {self.configs_.viewsRoot}
end
if type(self.configs_.modelsRoot) ~= "table" then
self.configs_.modelsRoot = {self.configs_.modelsRoot}
end
if DEBUG > 1 then
dump(self.configs_,"AppBase configs")
end
if CC_SHOW_FPS then
cc.Director:getInstance():setDisplayStats(true)
end
-- event
self:onCreate()
end
这里是 MyApp:run()的实现, function AppBase:run(initSceneName)
initSceneName = initSceneName or self.configs_.defaultSceneName --指定initScenenName
self:enterScene(initSceneName) --调用enterScene
end
enterScene()进入具体的场景逻辑了,相当于C++下调用Director::runWithScene() function AppBase:enterScene(sceneName,transition,time,more)
local view = self:createView(sceneName)
view:showWithScene(transition,time,more)
return view
end
显示的内容就是 app/views/MainScene.lua function MainScene:onCreate()
-- add background image
display.newSprite("HelloWorld.png")
:move(display.center)
:addTo(self)
-- add HelloWorld label,修改下label内容
cc.Label:createWithSystemFont("Hello Golds","Arial",40)
:move(display.cx,display.cy + 200)
:addTo(self)
end
运行 LUA->Run Without Debugging 发现创建lua项目的时候 设定的Working path问题,VS2013 默认将原来的脚本代码复制到了 Working path下了,所以改下设置; 重新运行就OK了: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |