cocos2d-x 游戏引擎入口

Cocos2d-x 是当前手游开发2d游戏最热门的引擎了,从知道Cocos2d-x到现在也有一年多的时间,但使用cocos2d-x的时间却是非常少的,以至于现在使用的时候都是一头雾水;所以现在打算 跟进一步的了解Cocos2d-x游戏引擎……

Cocos2d-x支持跨平台,而各种平台的实际应用入口是不相同的,为了寻找游戏引擎的入口,现用ios平台来说明;
注:我本非iOS开发者,对于iOS应用基本框架是不熟悉的,所以下面说的不会很详细,大概知道干吗的就可以了

打开3.0 版本的 cpp-empty-test, 在proj.ios目录下找到main.m,会发现有一个@“AppController”;接下来在proj.ios目录下找到AppController.mm文件,有一个静态的AppDelegate对象;在application方法的最后
cocos2d::Application *app = cocos2d::Application::getInstance();查看Application类、AppDelegate类、ApplicationProtocol类的源代码后会发现,app是指向前面看到的AppDelegate静态对象的;跟踪app->run();调用,可以看到CCDirectorCaller类的startMainLoop方法中,会看到有一个selector:@selector(doCaller:); 进入到doCaller方法中就能看到熟悉的东西了:Director::getInstance()->mainLooop();至此,才真正到了引擎内的主循环,开始绘制场景;

再有,一般教程会从AppDelegate类说起,这样的说法个人认为,虽然逻辑上游戏的入口确实是从这里启动的:第一个要加载的场景,第一个要加载的视图层都是在这里载入的,从游戏功能开发的角度看,开发者只要关心这个入口就够了;但对于想一探究竟的开发者来说,尤其是没有开发经验的新人来说绝对是一个坑;
再吐槽一个:AppDelegate::applicationDidFinishLaunching()方法中调用的Director::getInstance()->runWitnScene();真的只是一个逻辑上的run,进到方法内部后发现,它其实只是一个scene压栈的过程;也就是一个初始化需要最初绘制的东西的过程……

但回过头来讲,这样的设计是合理的,将需要隐藏的隐藏起来,给开发者一个简单的入口;

最后,一如既往的是,欢迎大家的意见和建议……,大家共同学习

你可能感兴趣的:(cocos2d-x,mainLoop)