quick如何打开工程或者示例

1. 那里打开工程

  1. cc.ui.UIPushButton.new(images, {scale9 = true})
  2. :setButtonSize(buttonWidth, buttonHeight)
  3. :setButtonLabel("normal", cc.ui.UILabel.new({
  4. UILabelType = 2,
  5. text = "打开",
  6. size = 18,
  7. }))
  8. :pos(display.width-padding, top)
  9. :addTo(node)
  10. :onButtonClicked(function()
  11. //新打开工程的配置
  12. local projectConfig = ProjectConfig:new()
  13. local argumentVector = vector_string_:new_local()
  14. local index = self.localProjectListView_:getCurrentIndex()
  15. if index > 0 then
  16. local arguments = cc.player.settings.PLAYER_OPEN_RECENTS[index].args
  17. for _,v in ipairs(arguments) do
  18. argumentVector:push_back(v)
  19. end
  20. projectConfig:parseCommandLine(argumentVector)
  21. //根据工程配置打开工程,下面分析:
  22. PlayerProtocol:getInstance():openNewPlayerWithProjectConfig(projectConfig)
  23. end
  24. end)

2.打开新工程

  1. void PlayerMac::openNewPlayerWithProjectConfig(const ProjectConfig& config)
  2. {
  3. if (_appController && [_appController respondsToSelector:NSSelectorFromString(@"launch:")])
  4. {
  5. NSString *commandLine = [NSString stringWithCString:config.makeCommandLine().c_str()
  6. encoding:NSUTF8StringEncoding];
  7. NSArray *arguments = [NSMutableArray arrayWithArray:[commandLine componentsSeparatedByString:@" "]];
  8. //对工程配置进行处理转换,然后调用AppController中的launch方法, 并把工程配置参数传递过去
  9. [_appController performSelector:NSSelectorFromString(@"launch:") withObject:arguments];
  10. }
  11. }
  1. - (void) launch:(NSArray*)args
  2. {
  3. //重新打开模拟器,也就是这个app,然后把新的工程配置信息传递过去, 这样重新打开的模拟器
  4. //就是新的工程了
  5. NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
  6. NSMutableDictionary *configuration = [NSMutableDictionary dictionaryWithObject:args forKey:NSWorkspaceLaunchConfigurationArguments];
  7. NSError *error = nil;
  8. [[NSWorkspace sharedWorkspace] launchApplicationAtURL:url
  9. options:NSWorkspaceLaunchNewInstance
  10. configuration:configuration error:&error];
  11. }

3.重新进入工程

  1. //相当于重新打开模拟器,只不过传递了新的工程配置信息,那这样就打开新的工程了
  2. - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
  3. {
  4. [self installUncaughtExceptionHandler];
  5. auto player = player::PlayerMac::create();
  6. player->setController(self);
  7. ...
  8. ...
  9. //updateProjectFromCommandLineArgs分析传递过来的新的工程信息,并转化为
  10. //ProjectConfig工程配置,然后打开新的工程
  11. [self updateProjectFromCommandLineArgs:&_project];
  12. //下面这些就跟第一次打开模拟器的时候一样了,只不过ProjectConfig使用的是新的
  13. [self createWindowAndGLView];
  14. [self registerEventsHandler];
  15. [self startup];
  16. }

4. .quick_player.lua文件内容,其实我们可以直接修改这个文件,加入我们自己的工程,

下面那个test就是我直接添加的,这些配置项的具体含义可以参看最下面的部分:

  1. PLAYER_WINDOW_WIDTH = 960,
  2. PLAYER_WINDOW_HEIGHT = 640,
  3. PLAYER_COCOACHINA_USER = "USER_NAME",
  4. PLAYER_WINDOW_X = 0,
  5. PLAYER_OPEN_LAST_PROJECT = true,
  6. PLAYER_WINDOW_Y = 0,
  7. PLAYER_COCOACHINA_KEY = "USER_KEY",
  8. PLAYER_OPEN_RECENTS ={
  9. {
  10. title = "/Users/staff/Documents/cocos-quick/cocos-quick-lua/quick/samples/drag/",
  11. args ={
  12. "-quick",
  13. "/Users/staff/Documents/cocos-quick/cocos-quick-lua/",
  14. "-workdir",
  15. "/Users/staff/Documents/cocos-quick/cocos-quick-lua/quick/samples/drag/",
  16. "-file",
  17. "/Users/staff/Documents/cocos-quick/cocos-quick-lua/quick/samples/drag/src/main.lua",
  18. "-writable",
  19. "/Users/staff/Documents/cocos-quick/cocos-quick-lua/quick/samples/drag/",
  20. "-size",
  21. "960x640",
  22. "-write-debug-log",
  23. "-console",
  24. "-disable-load-framework",
  25. "-disable-debugger",
  26. },
  27. },
  28. {
  29. title = "/Users/staff/Documents/cocos-quick/sampletest/test/",
  30. args ={
  31. "-quick",
  32. "/Users/staff/Documents/cocos-quick/cocos-quick-lua/",
  33. "-workdir",
  34. "/Users/staff/Documents/cocos-quick/sampletest/test/",
  35. "-file",
  36. "/Users/staff/Documents/cocos-quick/sampletest/test/src/main.lua",
  37. "-writable",
  38. "/Users/staff/Documents/cocos-quick/sampletest/test/",
  39. "-size",
  40. "960x640",
  41. "-disable-write-debug-log",
  42. "-console",
  43. "-disable-load-framework",
  44. "-offset",
  45. "{790,207}",
  46. "-disable-debugger",
  47. },
  48. },
  1. void ProjectConfig::parseCommandLine(const vector<string> &args)
  2. {
  3. auto it = args.begin();
  4. while (it != args.end())
  5. {
  6. string arg = *it;
  7. if (arg.compare("-quick") == 0)
  8. {
  9. ++it;
  10. if (it == args.end()) break;
  11. setQuickCocos2dxRootPath((*it).c_str());
  12. }
  13. else if (arg.compare("-workdir") == 0)
  14. {
  15. ++it;
  16. if (it == args.end()) break;
  17. setProjectDir(*it);
  18. if (_writablePath.length() == 0) setWritablePath(*it);
  19. }
  20. else if (arg.compare("-writable") == 0)
  21. {
  22. ++it;
  23. if (it == args.end()) break;
  24. setWritablePath(*it);
  25. }
  26. else if (arg.compare("-file") == 0)
  27. {
  28. ++it;
  29. if (it == args.end()) break;
  30. setScriptFile(*it);
  31. }
  32. else if (arg.compare("-package.path") == 0)
  33. {
  34. ++it;
  35. if (it == args.end()) break;
  36. setPackagePath(*it);
  37. }
  38. else if (arg.compare("-landscape") == 0)
  39. {
  40. setFrameSize(cocos2d::Size(DEFAULT_HEIGHT, DEFAULT_WIDTH));
  41. }
  42. else if (arg.compare("-portrait") == 0)
  43. {
  44. setFrameSize(cocos2d::Size(DEFAULT_WIDTH, DEFAULT_HEIGHT));
  45. }
  46. else if (arg.compare("-size") == 0)
  47. {
  48. ++it;
  49. if (it == args.end()) break;
  50. const string& sizeStr(*it);
  51. size_t pos = sizeStr.find('x');
  52. int width = 0;
  53. int height = 0;
  54. if (pos != sizeStr.npos && pos > 0)
  55. {
  56. string widthStr, heightStr;
  57. widthStr.assign(sizeStr, 0, pos);
  58. heightStr.assign(sizeStr, pos + 1, sizeStr.length() - pos);
  59. width = atoi(widthStr.c_str());
  60. height = atoi(heightStr.c_str());
  61. setFrameSize(cocos2d::Size(width, height));
  62. }
  63. }
  64. else if (arg.compare("-scale") == 0)
  65. {
  66. ++it;
  67. if (it == args.end()) break;
  68. float scale = atof((*it).c_str());
  69. setFrameScale(scale);
  70. }
  71. else if (arg.compare("-write-debug-log") == 0)
  72. {
  73. setWriteDebugLogToFile(true);
  74. }
  75. else if (arg.compare("-disable-write-debug-log") == 0)
  76. {
  77. setWriteDebugLogToFile(false);
  78. }
  79. else if (arg.compare("-console") == 0)
  80. {
  81. setShowConsole(true);
  82. }
  83. else if (arg.compare("-disable-console") == 0)
  84. {
  85. setShowConsole(false);
  86. }
  87. else if (arg.compare("-load-framework") == 0)
  88. {
  89. setLoadPrecompiledFramework(true);
  90. }
  91. else if (arg.compare("-disable-load-framework") == 0)
  92. {
  93. setLoadPrecompiledFramework(false);
  94. }
  95. else if (arg.compare("-offset") == 0)
  96. {
  97. ++it;
  98. if (it == args.end()) break;
  99. setWindowOffset(cocos2d::PointFromString((*it).c_str()));
  100. }
  101. else if (arg.compare("-app-menu") == 0)
  102. {
  103. _isAppMenu = true;
  104. }
  105. else if (arg.compare("-resize-window") == 0)
  106. {
  107. _isResizeWindow = true;
  108. }
  109. else if (arg.compare("-retina-display") == 0)
  110. {
  111. _isRetinaDisplay = true;
  112. }
  113. ++it;
  114. }
  115. setDebuggerType(kCCLuaDebuggerNone);
  116. }

quick如何打开工程或者示例的更多相关文章

  1. eclipse 创建maven 项目 动态web工程完整示例

    需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...

  2. xcode7 打开工程错误 This Document requires xcode8.0 or later.

    xcode7 打开工程错误 This Document requires xcode8.0 or later. 场景: xcode7创建的工程,后来安装了xcode8.0,用8打开7的工程跑了一下: ...

  3. 关于XCode5打开工程闪退的一种解决方案

    今天同事遇到一个问题,是关于xcode5打开工程文件一直闪退的问题.后来查看了一下崩溃日志.有如下描述: xception Type: EXC_CRASH (SIGABRT) Exception Co ...

  4. eclipse 创建maven 项目 动态web工程完整示例 maven 整合springmvc整合mybatis

    接上一篇: eclipse 创建maven 项目 动态web工程完整示例 eclipse maven工程自动添加依赖设置 maven工程可以在线搜索依赖的jar包,还是非常方便的 但是有的时候可能还需 ...

  5. Powerdesigner打开工程提示打印错误 解决方法

    在使用PowerDesigner打开工程时, 提示打印错误的问题,具体错误信息提示如下: 在您可以执行与打印机有关的任务(例如页面设置或打印一个文档)之前,您必须已经安装打印机.您想现在安装打印机么? ...

  6. (OpenExplorer For Eclipse)Eclipse 中打开工程目录的插件(转)

    我们想在Eclipse中的打开工程目录,Eclipse 自身没有这个功能,我们可以安装一个插件来实现这个功能.具体的操作方法如下: (1).到以下链接中下载插件:https://github.com/ ...

  7. Android Studio中每次打开工程Gradle sync龟速解决办法

    问题描述 自己使用android studio后,发现每次一打开工程,软件就在Grandle sync.sync就算了,而且这个步骤还必须过TZ,并且时间超级长,可能睡完觉起来还没有下载好.下面是正在 ...

  8. idea-----怎样取消idea默认打开工程

    怎样取消idea默认打开工程 引用:https://jingyan.baidu.com/article/656db918c05135e381249cb7.html

  9. Eclipse 中打开工程目录的插件

    我们想在Eclipse中的打开工程目录,Eclipse 自身没有这个功能,我们可以安装一个插件来实现这个功能.具体的操作方法如下: (1).到以下链接中下载插件:https://github.com/ ...

随机推荐

  1. nginx产生【413 request entity too large】错误的原因与解决方法

    项目上在做上传文件(清单导入)的时候产生了这个错误: 从字面上看,说的是请求的实体太大的问题,那么可以联想到是HTTP请求中的Body大小被限制了的原因. Nginx中的[client_max_bod ...

  2. WPF 精修篇 缩放ScaleTransform

    原文:WPF 精修篇 缩放ScaleTransform 缩放 ScaleTransform 参数 ScaleX  X轴缩小值 正常为1 ScaleY Y轴缩小值 正常为1 CenterY ,Cente ...

  3. leetcode求峰值,js实现

    原题: 最开始是照着提示的思路进行,中规中矩,用时64ms  /** * @param {number[]} nums * @return {number} */var findPeakElement ...

  4. golang下载图片,而非预览

    1 前言 网上查询使用html5,a增加属性download和使用表单get,post提交,都是只能预览,根本原因是返回值需要加入头 w.Header().Add("Content-Type ...

  5. 2019 浩德钢圈java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.浩德钢圈等公司offer,岗位是Java后端开发,因为发展原因最终选择去了浩德钢圈,入职一年时间了,也成为了面 ...

  6. 安装ceres-solver win10遇到Eigen安装的问题

    1.无法打开包括文件: “Eigen/Core”: 去github上下载最新的源码 2.  "The Eigen/Array header does no longer exist in E ...

  7. 5.css三角的做法

    如上图所示,类似这样的小三角都可以通过以下代码写出: .box1 { width: ; height: ; /* border: 10px solid pink; */ border-top: 10p ...

  8. mysql 带外注入

    带外通道 有时候注入发现并没有回显,也不能利用时间盲注,那么就可以利用带外通道,也就是利用其他协议或者渠道,如http请求.DNS解析.SMB服务等将数据带出. payload SELECT LOAD ...

  9. uni-app 无痛刷新 token 方法

    为了给用户一个流畅的体验, token 过期后需要重新请求新的 token 替换过期的 token 前端在请求接口时,和后端定义好了,如果状态码为 401 ,则表明 token 过期,需要前端请求新的 ...

  10. Django app安装,配置mysql,时区,模板,静态文件,媒体,admin

    1.创建app python manage.py startapp 名字 Migrations 数据库同步目录,记录数据库同步的记录 init 包文件 Admin.py django自带的后台管理文件 ...