佚名通过本文主要向大家介绍了我想问一下,洗澡时妈妈问我想不想,我想问一个问题,我想问老先生,想问你双手是否温热等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 我想问,Cocos2d-x 3x究竟是怎样跨平台开发和编译执行的
描述:
我们说AppDelegate里面的bool AppDelegate::applicationDidFinishLaunching() {};这个方法里面实现的是与平台无关性的代码;而Application类则封装了不同平台的实现。
我在Application中发现,根据所谓的不同的平台加载不同的头文件,我打开这些所谓的通过条件编译加载的文件,它们中的代码机几乎是一样的嘛,而且在win32下开发的游戏,可以通过配置android环境,打包成apk,但是为什么不能打包成iphone可以执行的程序呢?为什么一定要在Mac os上打包成iphone可以执行的程序ipa包呢?为什么会有2套Cocos2d-x for-windows Cocos2d-x for-mac 这两种版本呢?非常的不理解,请大家指点迷津????????
解决方案1:
描述:
cocos2d-x跨平台
这一段,我一直在寻找合适的Cocos2d-x是怎样跨平台的原因。网上有很多的话题,我觉得很难找到一篇彻底解释这个的。我们的Cocos2d-x开发出来的程序,入口是main函数(win32下),里面有AppDelegate app; return Application::getInstance()->run();这两句。为什么会创建一个app对象,因为AppDelegate类继承自Application类,而Application继承自ApplicationProtocal类,而没有完全实现该协议的抽象方法,所以Application是一个抽象类,不能够在类外进行实例化。Application要想实例化,需要借助于自身的getInstance(),而这个getInstance返回的是sm_pSharedApplication是一个单例【static Application * sm_pSharedApplication;】,初始值是0,如果想使用这个单例,就必须调用Application的构造函数,才能执行 sm_pSharedApplication = this;的操作。但是它本身是不会调用自身的构造函数的,所以必须借助于构造子类实例来调用父类的构造函数,达到 sm_pSharedApplication = this;的目的。这样的话, Application::getInstance()->run();才可以run的起来。我们说AppDelegate里面的bool AppDelegate::applicationDidFinishLaunching() {};这个方法里面实现的是与平台无关性的代码;而Application类则封装了不同平台的实现。
我在Application中发现,根据所谓的不同的平台加载不同的头文件,我打开这些所谓的通过条件编译加载的文件,它们中的代码机几乎是一样的嘛,而且在win32下开发的游戏,可以通过配置android环境,打包成apk,但是为什么不能打包成iphone可以执行的程序呢?为什么一定要在Mac os上打包成iphone可以执行的程序ipa包呢?为什么会有2套Cocos2d-x for-windows Cocos2d-x for-mac 这两种版本呢?非常的不理解,请大家指点迷津????????
解决方案1:
跨平台无非就是统一了接口,让上层可以不用关心平台来实现功能。
举个例子,每个平台的音频sdk都不一样,通过cocos播放音效过程:
安卓sdk->安卓音频sdk->cocos for 安卓 -> SimpleAudioEngine
它是基于安卓sdk,打包也需要安卓的环境。
同样的ios也是如此
ios sdk->ios音频sdk->cocos for ios -> SimpleAudioEngine
你打包也要ios环境, ios的打包环境只能在mac上面用xcode才行哦。