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())) {
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • Cocos2d-x学习(一):HelloWorld
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d 设置屏幕默认方向
  •  Cocos2d-x初学指南(5): Tiled Map的使用(视角移动,碰撞检测)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
  • cocos2d-x学习笔记(15)--地图的使用(TMX)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索 - 移动版 - 返回顶部
Copyright © 2008-2013 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1