cocos2d-x基础——基本代码框架

来源:互联网 发布:淘宝介入后对卖家影响 编辑:程序博客网 时间:2024/05/01 01:17

打开Xcode,大致的代码框架如下:


代码主要有两个部分,一部分在Classes目录下,一部分在ios/mac目录下。前者是cocos代码的入口,后者是ios/osx程序的入口。

ios/osx的程序入口位于AppController.mm。具体的函数是:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}

该函数运行了cocos创建的app类,这个类继承自cocos2d::Application类,具体运行代码:

cocos2d::Application *app = cocos2d::Application::getInstance();app->run();

类的实现在Classes目录下的AppDelegate.cpp中。

另外,在AppController.mm中还有几个重要的函数:

- (void)applicationDidEnterBackground:(UIApplication *)application {    /*     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.      If your application supports background execution, called instead of applicationWillTerminate: when the user quits.     */    cocos2d::Application::getInstance()->applicationDidEnterBackground();}- (void)applicationWillEnterForeground:(UIApplication *)application {    /*     Called as part of  transition from the background to the inactive state: here you can undo many of the changes made on entering the background.     */    cocos2d::Application::getInstance()->applicationWillEnterForeground();}
这些函数是ios应用中会用到的,表示的是程序进入后台和继续运行时会调用的函数。

这些都是ios开发用到的基础函数,可以参考《精通iOS开发》。


下面简单说下AppDelegate.cpp中的代码流程。

前面已经提到,在ios入口调用的是cocos2d::Application::getInstance()->run()来运行cocos代码的。

这个Application是一个静态类,run()函数的实现如下(这个需要看源代码):

int Application::run(){    if (applicationDidFinishLaunching())    {        [[CCDirectorCaller sharedDirectorCaller] startMainLoop];    }    return 0;}
可以看到它需要使用applicationDidFinishLaunching()函数,而这个函数就在AppDelegate.cpp中有实现:

bool AppDelegate::applicationDidFinishLaunching() {}

实现的过程主要用到了cocos中两个很重要的类,一个是Director,另一个是Scene。

Director类的作用主要是设置属性,和控制Scene。前者完成了游戏基础环境的设置,后者通过场景的控制就完成了游戏的流程,每一个Scene就是游戏的一版,比如游戏主机面,游戏场景等等。

Scene类本身可以认为是一个容器,它上面可以放不同的组件。比如Layer组件,就是HelloWorldScene.cpp里面实现的(虽然名字像是用来实现Scene的,但实际是实现Layer的):

class HelloWorld : public cocos2d::Layer{public:    static cocos2d::Scene* createScene();    virtual bool init();        // a selector callback    void menuCloseCallback(cocos2d::Ref* pSender);        // implement the "static create()" method manually    CREATE_FUNC(HelloWorld);};

Layer上也可以放各种组件。

无论是Scene还是Layer,它们都继承自Node类,它说所有场景的基本元素,所有能够被绘制出来的场景都继承了这个类。

这个以后再写。

以上。

0 0
原创粉丝点击