原创地址:http://game.dapps.net/gamedev/game-engine/9515.html
感谢原创分享!
怎么样使用 Cocos2d-x 高速开发游戏,方法非常easy,你能够看看其自带的例程,或者从网上搜索教程,执行起第一个 Scene HelloWorldScene。然后在 HelloWorldScene 里面写相关逻辑代码,加入我们的层、精灵等 ~ 我们并不一定须要知道 Cocos2d-x 是怎样执行或者在各种平台之上执行,也不用知道 Cocos2d-x 的游戏是怎样执行起来的。它又是怎样渲染界面的 ~~~
我们仅仅用知道 Cocos2d-x 的程序是由 AppDelegate 的方法 applicationDidFinishLaunching 開始。在当中做些必要的初始化。并创建执行第一个 CCScene 就可以,正如我们第一次使用各种编程语言写 Hello World! 的程序一样,如 Python 打印:
print(‘Hello World!’)
我们能够不用关心其是怎么实现的,我们仅仅要知道这样就能打印一句话就够了,这就是 封装所带来的优点 。
Cocos2d-x 自带的例程已经足够丰富,可是有些问题并非看看样例。调用其方法就能明确的事情,在这里一叶遇到了例如以下问题:
AppDelegate::AppDelegate()
{
CCLog("AppDelegate()"); // AppDelegate 构造函数打印
}
AppDelegate::~AppDelegate()
{
CCLog("AppDelegate().~()"); // AppDelegate 析构函数打印
}
// 程序入口
bool AppDelegate::applicationDidFinishLaunching()
{
// initialize director
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
// 初始化,资源适配。屏幕适配,执行第一个场景等代码
...
...
...
return true;
}
void AppDelegate::applicationDidEnterBackground()
{
CCDirector::sharedDirector()->pause();
}
void AppDelegate::applicationWillEnterForeground()
{
CCDirector::sharedDirector()->resume();
}
此时我并不知道程序执行时,何时调用 AppDelegate 的构造函数。析构函数和程序入口函数。我们仅仅要知道,程序在这里调用了其构造函数,然后进入入口函数执行其过程,最后再调用其析构函数就可以。然而事与愿违。在实际执行的过程中,发现程序仅仅调用其构造函数和入口函数。而直到程序结束执行。都 没有调用其析构函数。
要验证此说法非常easy,仅仅要如上在析构函数中调用打印日志便可验证。
发生这种情况,让我 在构造函数创建[资源],而且在析构函数中释放[资源] 的想法不能完毕!!。 我们知道它是从哪里開始执行,但却不知道它在哪里结束!疑问。唯有疑问!
两个入口
程序入口的概念是相对的,AppDelegate 作为跨平台程序入口,在这之上做了还有一层的封装,封装了不同平台的不同实现,比方我们通常觉得一个程序是由 main 函数開始执行。那我们就去找寻,我们看到了在 proj.linux 文件夹下存在 main.cpp 文件。这就是我们要看的内容。例如以下:
#include "../Classes/AppDelegate.h"
#include "cocos2d.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string>
USING_NS_CC;
// 500 is enough?
#define MAXPATHLEN 500
int main(int argc, char **argv)
{
// get application path
int length;
char fullpath[MAXPATHLEN];
length = readlink("/proc/self/exe", fullpath, sizeof(fullpath));
fullpath[length] = '