Cocos2D-X learning 2

概述

今天学习了在Cocos2D-X开发中创建场景,以及在场景中加入图片资源,并通过写一个简单的例子对涉及到的CCLayer和CCSprite进行练习和熟悉。

过程

首先,场景类需要继承于CCLayer,并且必须实现类函数CCScene *scene()和虚函数bool init(),前者用于建立场景并在场景中加入层以备演示CCSprite,而后者则是用于对本场景进行初始化,代码如下:

GameScene.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef __HelloCocos__GameScene__
#define __HelloCocos__GameScene__

#include <iostream>
#include "cocos2d.h"

using namespace cocos2d;

class GameScene: public CCLayer {
private:
public:
virtual bool init();
static CCScene * scene();
CREATE_FUNC(GameScene);
};
#endif /* defined(__HelloCocos__GameScene__) */

以上代码, CREATE_FUNC(GameScene)是一个宏,此宏的功能是为GameScene类创建一个GameScene *GameScene::create()类函数,由于此函数的功能单一,其主要作用就是用来调用对象中的init()方法,因此,使用宏对代码进行简化是一个非常好的方法。

GameScene.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#include "GameScene.h"

CCScene * GameScene::scene()
{
CCScene *scene = CCScene::create();
MyScene *layer = MyScene::create();
scene->addChild(layer);
return scene;
}

bool GameScene::init()
{
if (!CCLayer::init()) {
return false;
}
CCSprite *sprite = CCSprite::create("Icon-72.png");
sprite->setPosition(ccp(300, 300));
this->addChild(sprite);

return true;
}

以上这段代码完成了一个基本的CCLayer子函数,并对其进行合适的初始化。其主要工作为,在CCScene *GameScene::scene()方法中始建一个CCScene对象,并将此类的对象加入为子元素。

同时,在bool GameScene::init()方法中用一个图片文件初始化一个精灵对象,并将其加入层中的(300,300)位置。

其中,ccp(300, 300)是一个宏调用,这个宏的作用是实例化一个CCPoint对象,CCPoint类指示了屏幕上的一个坐标。

PS:在Cocos2D中,坐标点(0,0)为左下角,这一点与Web及iOS应用开发都是不同的,Web与iOS坐标(0,0)为显示区域的右上角。

AppDelegate.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "AppDelegate.h"
#include "GameScene.h"

USING_NS_CC;

AppDelegate::AppDelegate() {

}

AppDelegate::~AppDelegate()
{
}

bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
CCDirector* pDirector = CCDirector::sharedDirector();
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

pDirector->setOpenGLView(pEGLView);

// turn on display FPS
pDirector->setDisplayStats(true);

// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);

// create a scene. it's an autorelease object
CCScene *pScene = GameScene::scene();

// run
pDirector->runWithScene(pScene);

return true;
}

// This function will be called when the app is inactive. When comes a phone call,it's be invoked too
void AppDelegate::applicationDidEnterBackground() {
CCDirector::sharedDirector()->stopAnimation();

// if you use SimpleAudioEngine, it must be pause
// SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}

// this function will be called when the app is active again
void AppDelegate::applicationWillEnterForeground() {
CCDirector::sharedDirector()->startAnimation();

// if you use SimpleAudioEngine, it must resume here
// SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}

以上代码为建立Cocos2D-X项目时自动生成的,只需要修改成与上面一致,主要是此处的修改一致CCScene *pScene = GameScene::scene()

结束

到这里,第一次在Cocos2D-X中写代码就完成了,到目前为止,感觉在游戏中的概念并不难接受,但是,这只是开头,学一种技能最重要的是能够坚持下去,否则再简单的东西也是学不到手的。