cocos2d-x开发: 如何从项目中分离出接口范例(2)
来源:未知 责任编辑:责任编辑 发表时间:2015-03-01 01:34 点击:次
p>13 std::string M_cmdline_;
p>
p>这是引擎封装好的入口代理,这里我添加了一个私有属性,用来装从命令行读取的参数.不管读到了什么,都一并装过来.不过,既然是我写,我当然知道我希望的格式是什么样子的了. “xiaoyan.exe -esrc/Tests/TestsController.lua”
p>
p>就像是这个样子的,解析的时候我只要去解析-e后面的flag属性字段,我就知道要运行什么模块的代码了.好了,我做了一下Unicode字符串到ansi的转换,如下:
p>
p>
p> 1 win32 main.cpp
p> 2 // create the application instance
p> 3 AppDelegate app;
p> 4 if(__argc > 1)
p> 5 {
p> 6 #if(UNICODE)
p> 7 std::wstring wcmdLine(lpCmdLine);
p> 8 const wchar_t* wparams = wcmdLine.c_str();
p> 9 size_t size = wcmdLine.size() * 2 + 1;
p>10 char* tmp = new char[size];
p>11 memset(tmp, 0, size);
p>12 wcstombs(tmp, wparams, size);
p>13 std::string cmdline(tmp);
p>14 app.setCmdLine(cmdline);
p>15 delete[] tmp;
p>16 #else
p>17 std::string cmdLine(lpCmdLine);
p>18 app.setCmdLine(cmdline);
p>19 #endif
p>20 }
p>21 int ret = Application::getInstance()->run();
p>
p>虽然我不懂win32 sdk,但是简单看看unicode处理,还是很容易写出上面的这些代码.现在,我拿到了我想要的命令行参数,也做了相应的跨平台转化处理,放在std::string,解析部分就简单了,直接给实现:
p>
p> 1 std::string AppDelegate::getCmdByFlag(const std::string& flag, const std::string& defaultValue)
p> 2 {
p> 3 4 if(this->M_cmdline_.empty()) { return defaultValue; }
p> 5 std::size_t index = this->M_cmdline_.find(flag);
p> 6 if(index == std::string::npos) { return defaultValue; }
p> 7 std::size_t nextIndex = this->M_cmdline_.find("-", index+flag.size());
p> 8 if(nextIndex == std::string::npos) { return this->M_cmdline_.substr(index+flag.size(), std::string::npos); }
p> 9 else { return this->M_cmdline_.substr(index+flag.size(), nextIndex-index-flag.size()); }
p>10 return defaultValue;
p>11 }
p>
p>经过上面的变动,我就可以去修改我的引擎入口实现了,不废话,直接看吧.
p>
p>
p> 1 bool AppDelegate::applicationDidFinishLaunching()
p> 2 {
p> 3 auto engine = LuaEngine::getInstance();
p> 4 ScriptEngineManager::getInstance()->setScriptEngine(engine);
p> 5 std::string entranceFile = getCmdByFlag("-e", "main.lua");
p> 6 if (engine->executeScriptFile(entranceFile.c_str())) {
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>