quick player运行分析

mac应用从AppController.mm源文件的applicationDidFinishLaunching函数启动:
  1 1、
  2 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
  3 {
  4     [self installUncaughtExceptionHandler];
  5
  6     //创建player
  7     auto player = player::PlayerMac::create();
  8     player->setController(self);
  9
 10     _isAlwaysOnTop = NO;
 11     _debugLogFile = 0;
 12
 13     _buildTask = nil;
 14     _isBuildingFinished = YES;
 15
 16     // load QUICK_V3_ROOT from ~/.QUICK_V3_ROOT
 17     // 从~/.QUICK_V3_ROOT获取quick根目录,我的:Users/staff/Documents/quick-3.3
 18     NSMutableString *path = [NSMutableString stringWithString:NSHomeDirectory()];
 19     [path appendString:@"/.QUICK_V3_ROOT"];
 20     NSError *error = nil;
 21     NSString *env = [NSString stringWithContentsOfFile:path
 22                                               encoding:NSUTF8StringEncoding
 23                                                  error:&error];
 24     if ([error code] || env.length == 0)
 25     {
 26     //没有这个配置则报错,提示你执行setup_mac.sh脚本
 27         [self showAlertWithoutSheet:@"Please run \"setup_mac.sh\", set Quick-Cocos2dx-Community root path."
 28                           withTitle:@"quick player error"];
 29         [[NSApplication sharedApplication] terminate:self];
 30     }
 31
 32         //_project.setQuickCocos2dxRootPath设置qucik根目录
 33     env = [env stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
 34     _project.setQuickCocos2dxRootPath([env cStringUsingEncoding:NSUTF8StringEncoding]);
 35
 36 //分析命令行参数,设置_project的值,这个后面详细分析
 37     [self updateProjectFromCommandLineArgs:&_project];
 38
 39     //创建WindowAndGLView,2分析
 40     [self createWindowAndGLView];
 41
 42     //注册监听事件
 43     [self registerEventsHandler];
 44
 45     //启动,3分析
 46     [self startup];
 47 }
 48
 49 2、
 50 - (void) createWindowAndGLView
 51 {
 52     //设置GLContextAttrs
 53     GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8};
 54     GLView::setGLContextAttrs(glContextAttrs);
 55
 56     float frameScale = _project.getFrameScale();
 57
 58     // create opengl view
 59     cocos2d::Size frameSize = _project.getFrameSize();
 60
 61 //创建GLView,GLViewImpl是针对desktop平台实现的 文件在platform/desktop/CCGLViewImpl-desktop.h
 62     const cocos2d::Rect frameRect = cocos2d::Rect(0, 0, frameSize.width, frameSize.height);
 63     GLViewImpl *eglView = GLViewImpl::createWithRect("player", frameRect, frameScale, _project.isResizeWindow());
 64
 65     auto director = Director::getInstance();
 66     director->setOpenGLView(eglView);
 67
 68     _window = eglView->getCocoaWindow();
 69     [NSApp setDelegate:self];
 70     [_window center];
 71
 72     if (_project.getProjectDir().length())
 73     {
 74         [self setZoom:_project.getFrameScale()];
 75         Vec2 pos = _project.getWindowOffset();
 76         if (pos.x != 0 && pos.y != 0)
 77         {
 78             [_window setFrameOrigin:NSMakePoint(pos.x, pos.y)];
 79         }
 80     }
 81 }
 82
 83 3、
 84 - (void) startup
 85 {
 86     FileUtils::getInstance()->setPopupNotify(false);
 87
 88     //quick根目录
 89     std::string path = _project.getQuickCocos2dxRootPath();
 90
 91     //如果设置了项目目录,则把项目目录设置为setDefaultResourceRootPath资源搜索默认目录
 92     const string projectDir = _project.getProjectDir();
 93     if (projectDir.length())
 94     {
 95         FileUtils::getInstance()->setDefaultResourceRootPath(projectDir.c_str());
 96         //如果设置了log输出文件
 97         if (_project.isWriteDebugLogToFile())
 98         {
 99             [self writeDebugLogToFile:_project.getDebugLogFilePath()];
100         }
101     }
102
103     // set framework path
104     // 设置quick框架文件目录加入到搜索目录中_project.getQuickCocos2dxRootPath() + "quick/"
105     if (!_project.isLoadPrecompiledFramework())
106     {
107         FileUtils::getInstance()->addSearchPath(_project.getQuickCocos2dxRootPath() + "quick/");
108     }
109
110     //设置可写目录
111     const string writablePath = _project.getWritableRealPath();
112     if (writablePath.length())
113     {
114         FileUtils::getInstance()->setWritablePath(writablePath.c_str());
115     }
116
117 //显示Console,并且输出Configuration配置信息
118     if (_project.isShowConsole())
119     {
120         [self openConsoleWindow];
121         CCLOG("%s\n",Configuration::getInstance()->getInfo().c_str());
122     }
123
124     //加载lua配置
125     [self loadLuaConfig];
126     [self adjustEditMenuIndex];
127     if (!_project.isAppMenu())
128     {
129         NSMenu *mainMenu = [[NSApplication sharedApplication] mainMenu];
130         NSArray *menuArray = [mainMenu itemArray];
131         for (int i = 1; i < [menuArray count]; i++)
132         {
133             id onemenu = [menuArray objectAtIndex:i];
134             [mainMenu removeItem:onemenu];
135         }
136     }
137
138     // app 运行app
139     _app = new AppDelegate();
140     _app->setProjectConfig(_project);
141     Application::getInstance()->run();
142     // After run, application needs to be terminated immediately.
143     [NSApp terminate: self];
144 }
145
146 4、
147 - (void) loadLuaConfig
148 {
149     LuaEngine* pEngine = LuaEngine::getInstance();
150     ScriptEngineManager::getInstance()->setScriptEngine(pEngine);
151
152     luaopen_PlayerLuaCore(pEngine->getLuaStack()->getLuaState());
153     luaopen_PlayerLuaCore_Manual(pEngine->getLuaStack()->getLuaState());
154
155
156     NSMutableString *path = [NSMutableString stringWithString:NSHomeDirectory()];
157     [path appendString:@"/"];
158
159
160     //
161     // set user home dir
162     //
163     lua_pushstring(pEngine->getLuaStack()->getLuaState(), path.UTF8String);
164     lua_setglobal(pEngine->getLuaStack()->getLuaState(), "__USER_HOME__");
165
166
167     //
168     // ugly: Add the opening project to the "Open Recents" list
169     //
170     lua_pushstring(pEngine->getLuaStack()->getLuaState(), _project.getProjectDir().c_str());
171     lua_setglobal(pEngine->getLuaStack()->getLuaState(), "__PLAYER_OPEN_TITLE__");
172
173     lua_pushstring(pEngine->getLuaStack()->getLuaState(), _project.makeCommandLine().c_str());
174     lua_setglobal(pEngine->getLuaStack()->getLuaState(), "__PLAYER_OPEN_COMMAND__");
175
176     //
177     // load player.lua file
178     // 加载player.lua文件
179     //
180     string playerCoreFilePath = _project.getQuickCocos2dxRootPath() + "quick/welcome/src/player.lua";
181     pEngine->executeScriptFile(playerCoreFilePath.c_str());
182 }
时间: 2024-11-11 02:26:11

quick player运行分析的相关文章

WAMP运行分析

运行机制: 执行refresh.php 脚本.加载语言包.是否服务器在线,加载在线执行脚本onlineOffline.php. 加载/bin/apache目录下当前apache版本目录中的php.ini配置文件.扫描php_XXX.dll扩展文件,存储到数组$ext数组中. 加载/bin/apapche/目录下当前apapche版本目conf录中的httpd.conf配置文件. 扫描LoadModule_XXXX.so扩展文件,存储到数组$mod数组中. 扫描/bin/php目录,获取PHP版本

第四章 YARN 第一节 YARN应用运行分析

Apache YARN(Yet Another Resource Negotiator)是一个HADOOP集群资源管理系统.YARN在HADOOP2 中引入,但是它足够通用,也支持其它的分布式计算程序. YARN提供了用于请求和使用集群资源的API,但是这些API不是直接由用户代码使用的.用户写更高级的由 分布式计算框架提供的API,这些框架是建立在YARN之上的,对用户隐藏了资源管理的细节.这个情况如图4-1 所示,它显示了一些作为YARN应用的分布式计算框架(MapReduce,Spark等

hadoop-mapreduce中reducetask运行分析

ReduceTask的运行 Reduce处理程序中需要执行三个类型的处理, 1.copy,从各map中copy数据过来 2.sort,对数据进行排序操作. 3.reduce,执行业务逻辑的处理. ReduceTask的运行也是通过run方法开始, 通过mapreduce.job.reduce.shuffle.consumer.plugin.class配置shuffle的plugin, 默认是Shuffle实现类.实现ShuffleConsumerPlugin接口. 生成Shuffle实例,并执行

【转】Scrapy研究探索(三)——Scrapy核心架构与代码运行分析

转自 http://blog.csdn.net/u012150179/article/details/34441655 学习曲线总是这样,简单例子“浅尝”,在从理论+实践慢慢攻破.理论永远是基础,切记“勿在浮沙筑高台”. 一. 核心架构 关于核心架构,在官方文档中阐述的非常清晰,地址:http://doc.scrapy.org/en/latest/topics/architecture.html. 英文有障碍可查看中文翻译文档,笔者也参与了Scraoy部分文档的翻译,我的翻译GitHub地址:h

hadoop-mapreduce中maptask运行分析

MapTask运行通过执行.run方法: 1.生成TaskAttemptContextImpl实例,此实例中的Configuration就是job本身. 2.得到用户定义的Mapper实现类,也就是map函数的类. 3.得到InputFormat实现类. 4.得到当前task对应的InputSplit. 5.通过InputFormat,得到对应的RecordReader. 6.生成RecordWriter实例, 如果reduce个数为0,生成为MapTask.NewDirectOutputCol

java程序运行分析

使用工具:Eclipse Stardard 4.32版本(window7环境) 今天我们通过一个及其简单的例子来分析一个java程序是如何在我们的及其上跑起来的.部分内容是参考其他人的,会在参考的地方注明. 我的测试代码部分如下: public class Test { public static void main(String[] args) { new Test(); Int test =1;//只是为了测试方便,去掉IO部分的分析 } } 就是这么简单的代码,如何在我们的机器上跑起来,确

player: 初始化分析

//1. //cocos 程序开始运行时执行的函数 bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); director->setProjection(Director::Projection::_2D); // turn on display FPS director->setDisplayStats(true);

React Native 项目结构及运行分析(HelloWorld)

********************  RN开发环境搭建完成后,总会来一个“HelloWorld”嘚瑟一下.******************** 参考资料:http://v.youku.com/v_show/id_XMTQ4OTYyMjg4MA==.html 1.创建HelloWorld (一个很恶心的地方就是:每次都得用终端输入替换镜像源的两个命令,要不然就得悲催的傻等) 2.成功后,会在根目录生成HelloWorld的工程. package.json 文件 A.name和versio

Java开源运行分析工具(转)

FProfiler FProfiler是一个非常快的Java profiler.它利用BCEL和log4j来记录每个方法从开始到结尾的日记.FProfiler可以用来在你的应用程序,Servlet,Applet...中找出hotspots. 更多FProfiler信息 JRat JRat是一个Java Runtime分析工具包.它的目的是让开发者更好的明白Java程序动行时的状态.JRat包括但并不只局限于性能剖析. 更多JRat信息 EJP EJP(Extensible Java Profil