精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

cocos2d-x完成游戲后的一些錦上添花修飾

移動開發 iOS Android 游戲開發
經過前面幾段的介紹,各位開發者可以利用cocos2d-x完成一款簡單的游戲基本功能了,但是我們可以在其中加入一些修飾,讓它顯得更專業一些。

在這一章里,我們將會添加新的場景。當你干掉一定數量的怪物時,在屏幕上顯示“You Win”,而當有怪物逃出屏幕左側時,顯示“You Lose”。

下面我們在類目錄里新建兩個文件,GameOverScene.cpp 和GameOverScene.h。

GameOverScene.h的內容

1#ifndef _GAME_OVER_SCENE_H_

2#define _GAME_OVER_SCENE_H_

3

4#include "cocos2d.h"

5

6class GameOverLayer : public cocos2d::CCLayerColor

7{

8public:

9 GameOverLayer():_label(NULL) {};

10 virtual ~GameOverLayer();

11 bool init();

12 LAYER_NODE_FUNC(GameOverLayer);

13

14 void gameOverDone();

15

16 CC_SYNTHESIZE_READONLY(cocos2d::CCLabelTTF*, _label, Label);

17};

18

19class GameOverScene : public cocos2d::CCScene

20{

21public:

22 GameOverScene():_layer(NULL) {};

23 ~GameOverScene();

24 bool init();

25 SCENE_NODE_FUNC(GameOverScene);

26

27 CC_SYNTHESIZE_READONLY(GameOverLayer*, _layer, Layer);

28};

29

30#endif // _GAME_OVER_SCENE_H_

1#import "cocos2d.h"

2@interface GameOverLayer : CCLayerColor

3{

4 CCLabel *_label;

5}

6

7@property (nonatomic, retain) CCLabel *label;

8@end

9

10@interface GameOverScene : CCScene

11{

12 GameOverLayer *_layer;

13}

14@property (nonatomic, retain) GameOverLayer *layer;

15@end

轉換要點:

1. 在objc的頭文件中,可以不聲明類成員函數,而直接在.m文件里實現。cpp不允許這樣做。所以我們會多個bool init();

2. 由于cpp里沒有self這種強大的關鍵字,所以CCLayer::node()和CCScene::node()方法的都需要派生類自己實現一份,不能像objc那樣直接從父類繼承下來靠self關鍵字變成指向自己的對象。node()方法很方便,集合了new,init,autorelease等方法,可以減少調用者的代碼量。但由于每份node方法的代碼都類似,我們就做了兩個宏來方便大家 LAYER_NODE_FUNC和SCENE_NODE_FUNC. 如果想使用這兩個宏,就必須在派生類里實現bool init()方法。

3. 關于構造函數和init方法。cocos2d-x在從objc改寫為cpp時,并不是直接把init的內容翻到C++構造函數里面,主要出于這樣的考慮:C++構造函數有個天生缺陷——沒有返回值。這就導致C++構造函數依賴try-catch來捕捉邏輯異常。而一般try-catch用的人不多,開啟try-catch支持會使編譯后的二進制程序增加不少體積,而且android NDK上也是徹底不支持try-catch。所以我們采取現在比較流行的“二階段構造”的方法,即使用時先調構造函數,再調用init處理初始化邏輯。這種思路不論是在蘋果iOS的接口設計(比如[[NSString alloc] init],即二階段構造)、還是在samsung bada操作系統使用C++類時都是如此。

4. objc中的@synthesize實現了_label和_layer兩個屬性的具體setter和getter。我們在cocos2dx\include\Cocos2dDefine.h中實現了一系列的宏定義,來模仿實現@property和@synthesize的功能。在上面代碼中,我們用CCX_SYNTHESIZE_READONLY宏來實現了只讀的類成員變量,只有getter沒有setter。由于VC++的規則是inline函數只能在頭文件里實現,所以@synthesize就從objc的.m文件里移動到cpp的.h文件里,和成員變量聲明一并實現了

GameOverScene.cpp的內容

1// cpp with cocos2d-x

2#include "GameOverScene.h"

3#include "HelloWorldScene.h"

4

5using namespace cocos2d;

6

7bool GameOverScene::init()

8{

9 if( CCScene::init() )

10 {

11 this->_layer = GameOverLayer::node();

12 this->_layer->retain();

13 this->addChild(_layer);

14

15 return true;

16 }

17 else

18 {

19 return false;

20 }

21}

22

23GameOverScene::~GameOverScene()

24{

25 if (_layer)

26 {

27 _layer->release();

28 _layer = NULL;

29 }

30}

31

32bool GameOverLayer::init()

33{

34 if ( CCLayerColor::initWithColor( ccc4(255,255,255,255) ) )

35 {

36 CCSize winSize = CCDirector::sharedDirector()->getWinSize();

37 this->_label = CCLabelTTF::labelWithString("","Artial", 32);

38 _label->retain();

39 _label->setColor( ccc3(0, 0, 0) );

40 _label->setPosition(ccp(winSize.width/2, winSize.height/2));

41 this->addChild(_label);

42

43 this->runAction( CCSequence::actions(

44 CCDelayTime::actionWithDuration(3),

45 CCCallFunc::actionWithTarget(this,

46 callfunc_selector(GameOverLayer::gameOverDone)),

47 NULL));

48

49 return true;

50 }

51 else

52 {

53 return false;

54 }

55}

56

57void GameOverLayer::gameOverDone()

58{

59 CCDirector::sharedDirector()->replaceScene(HelloWorld::scene());

60}

61

62GameOverLayer::~GameOverLayer()

63{

64 if (_label)

65 {

66 _label->release();

67 _label = NULL;

68 }

69}

1// objc with cocos2d-iphone

2#import "GameOverScene.h"

3#import "HelloWorldScene.h"

4

5@implementation GameOverScene

6@synthesize layer = _layer;

7

8- (id)init

9{

10 if ((self = [super init]))

11 {

12 self.layer = [GameOverLayer node];

13 [self addChild:_layer];

14 }

15 return self;

16}

17

18- (void)dealloc

19{

20 [_layer release];

21 _layer = nil;

22 [super dealloc];

23}

24

25@end

26@implementation GameOverLayer

27@synthesize label = _label;

28

29-(id) init

30{

31 if( (self=[super initWithColor:ccc4(255,255,255,255)] ))

32 {

33 CGSize winSize = [[CCDirector sharedDirector] winSize];

34 self.label = [CCLabel

35 labelWithString:@"" fontName:@"Arial" fontSize:32];

36

37 _label.color = ccc3(0,0,0);

38 _label.position = ccp(winSize.width/2, winSize.height/2);

39 [self addChild:_label];

40

41 [self runAction:[CCSequence actions:

42 [CCDelayTime actionWithDuration:3],

43 [CCCallFunc actionWithTarget:self

44 selector:@selector(gameOverDone)],

45 nil]];

46 }

47 return self;

48}

49

50- (void)gameOverDone

51{

52 [[CCDirector sharedDirector]

53 replaceScene:[HelloWorld scene]];

54}

55

56- (void)dealloc

57{

58 [_label release];

59 _label = nil;

60 [super dealloc];

61}

62

63@end

注意,上面GameOverScene.cpp里有兩個對象,一個場景(scene)和一個圖層(layer),場景可以包含多個圖層,而這個圖層只在屏幕正中間放了一個文字標簽(label),顯示3秒種后返回到HelloWorldScene中。

轉換要點

1. 再次注意GameOverLayer._label和GameOverScene._layer兩個屬性。這兩個屬性在objc的頭文件里被聲明為@property (nonatomic, retain),也就是被retain了一次,所以在dealloc里才要調用release方法。同樣地,我們在~GameOverLayer()和~GameOverScene()析構函數里分別release()了這兩個屬性,但這個release需要和一個retain對應,所以在兩個init方法里都分別添加了_label->retain()和_layer->retain();

2. 關于NSAutoReleasePool, cocos2d-x里也有個模仿實現,這個簡單的垃圾回收機制對C++編程來說是個福音;它使用起來和iOS上的NSAutoReleasePool原則一樣,參考蘋果的文檔 http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html

簡而言之就是,在使用cocos2d-x中繼承自NSObject類的對象指針時,以下兩種情況是需要用戶多調一個release

 類對象是用戶自己new出來的。比如CCSprite *sprite = new CCSprite();

 類對象是通過某個靜態函數建立并返回的,比如CCSprite *sprite = CCSprite::spriteWithFile(...),這種情況不需要用戶release;但如果你接著調用了sprite->retain(), 那么就需要一個sprite->release()對應

之后回到問題上來,GameOverScene應該在某些條件下被調用:一定數量的怪物被干掉或者有怪物跳掉了。

我們在HelloWorldScene里加入一個變量,用來計算英雄殺掉了多少個怪物。

11 // cpp with cocos2d-x

22 protected:

33 int _projectilesDestroyed;

11 // objc with cocos2d-iphone

22

33 int _projectilesDestroyed;

并在HelloWorld::HelloWorld()中初始化它,

1 // cpp with cocos2d-x

2_projectilesDestroyed = 0;

在HelloWorldScene.cpp中包含GameOverScene.h

1// cpp with cocos2d-x

2#include "GameOverScene.h"

1// objc with cocos2d-iphone

2#import "GameOverScene.h"

在HelloWorld::update方法中的removeChild(target)后面的targetsToDelete循環中增加計數并檢查獲勝條件,獲勝了就顯示"You Win!"界面

1// cpp with cocos2d-x

2_projectilesDestroyed++;

3if (_projectilesDestroyed > 30)

4{

5 GameOverScene *gameOverScene = GameOverScene::node();

6 gameOverScene->getLayer()->getLabel()->setString("You Win!");

7 CCDirector::sharedDirector()->replaceScene(gameOverScene);

8}

1

2// objc with cocos2d-iphone

3_projectilesDestroyed++;

4if (_projectilesDestroyed > 30)

5{

6 GameOverScene *gameOverScene = [GameOverScene node];

7 [gameOverScene.layer.label setString:@"You Win!"];

8 [[CCDirector sharedDirector] replaceScene:gameOverScene];

9}

與之匹配的是失敗條件:任何一個怪物穿越了屏幕的最左邊,你就掛了。于是修改spriteMoveFinished方法,在if (sprite->getTag() == 1)條件里面增加“You Lose”的代碼:

1// cpp with cocos2d-x

2GameOverScene *gameOverScene = GameOverScene::node();

3gameOverScene->getLayer()->getLabel()->setString("You Lose :[");

4CCDirector::sharedDirector()->replaceScene(gameOverScene);

1// objc with cocos2d-iphone

2GameOverScene *gameOverScene = [GameOverScene node];

3[gameOverScene.layer.label setString:@"You Lose :["];

4[[CCDirector sharedDirector] replaceScene:gameOverScene];

現在,萬事俱備,請編譯并運行,所有類型的效果都會顯示出來,怪物、子彈滿屏飛,很H的背景音樂,并在你輸或贏時顯示一個提示界面。

整個游戲現在已經全部完成了,恭喜!

iPhone

android

win32

wophone

責任編輯:佚名 來源: cocos2d-x
相關推薦

2012-04-17 13:12:00

2011-12-12 10:40:08

Cocos2d-X游戲開發開發環境

2012-04-19 10:03:12

Cocos2d-x

2013-05-22 15:49:46

2012-02-19 20:10:23

Cocos2d-x fCocos2dWindows Pho

2012-04-17 12:38:46

cocos2d-x

2012-04-17 12:44:38

cocos2d-x

2014-08-13 10:07:02

游戲引擎

2015-07-17 10:38:21

教程COCOS射箭游戲

2013-12-03 10:58:50

Cocos2D-X磚塊地圖

2012-04-17 10:59:31

cocos2d-x

2012-04-17 10:06:08

cocos2d-x

2013-04-16 10:02:47

cocos2d-x懶人Android開發

2015-07-21 16:25:24

2014-04-21 14:58:27

觸控Cocos2d-x觸控科技

2013-05-22 14:38:44

iOS開發Cocos2d-x坐標系統

2012-04-17 12:58:44

Cocos2D-X

2013-06-03 17:04:20

CocoStudioCocos2D-X添加CocoStudi

2014-07-31 16:57:30

2012-04-17 13:09:13

Cocos2d-x
點贊
收藏

51CTO技術棧公眾號

久久性色av| 日本少妇吞精囗交| 成年人在线视频| 奇米精品一区二区三区在线观看 | 性欧美xxxx免费岛国不卡电影| 一本到不卡免费一区二区| 先锋影音网一区| 亚洲成人黄色片| 老司机午夜免费精品视频| 亚州av日韩av| 中文字幕在线观看不卡| 国产美女精品在线观看| 天天干,天天干| 一区二区在线| 亚洲一区第一页| 精人妻一区二区三区| 免费观看成人性生生活片| 久久精品国产第一区二区三区| 久久香蕉国产线看观看av| av免费网站观看| 在线看福利影| 久久精品亚洲精品国产欧美kt∨| 亚洲伊人久久大香线蕉av| 精品熟妇无码av免费久久| 日韩一区二区三区高清在线观看| 欧美香蕉大胸在线视频观看| 国产精品成人观看视频免费| 免费在线不卡av| 精品久久影院| 亚洲第一色中文字幕| 日韩在线不卡一区| 亚洲黄色网址| 亚洲第一av色| 一本色道久久88亚洲精品综合| 日产精品高清视频免费| 国产三级日本三级在线播放| 曰本三级在线| 国产精品欧美一区喷水| 久久涩涩网站| 免费观看国产视频| 红桃视频欧美| 久久亚洲影音av资源网| 欧美偷拍一区二区三区| 露出调教综合另类| 精品国产一区二区三区忘忧草| 日本特黄a级片| 91福利在线视频| 91麻豆国产在线观看| 成人h在线播放| 国产女人18毛片水18精| 欧美 日韩 国产 一区| 国产香蕉精品视频一区二区三区| 星空大象在线观看免费播放| 中文字幕久久精品一区二区| 91精品国产综合久久福利软件| 可以免费看的黄色网址| 中文字幕日本在线| 国产欧美日韩综合| 国产亲近乱来精品视频| 久久久精品视频在线观看| 蜜桃传媒一区二区亚洲| 九一国产精品| 一本大道久久加勒比香蕉| 女人又爽又黄免费女仆| 欧美人与牛zoz0性行为| 亚洲一二三在线| 91激情视频在线观看| 成人精品影视| 久久久精品一区二区三区| 乱h高h女3p含苞待放| 影视亚洲一区二区三区| 欧美日韩aaaa| 亚洲精品视频大全| 天堂资源在线亚洲| 亚洲免费精彩视频| 三年中国中文观看免费播放| 日韩激情免费| 久热精品视频在线观看一区| 免费在线视频一区二区| 99精品福利视频| 欧美综合一区第一页| 无码人妻丰满熟妇奶水区码| 奇米一区二区三区| 成人黄色短视频在线观看| 香蕉免费毛片视频| 成人涩涩视频| 正在播放日韩欧美一页| 久久天天躁日日躁| 日本三级黄色大片| 玖玖玖国产精品| 成人自拍性视频| 人妻中文字幕一区| 国产色产综合色产在线视频 | 国产一区二区三区日韩精品| 亚洲跨种族黑人xxx| 夫妇露脸对白88av| 欧美va天堂在线| 国产91成人video| 在线观看黄色国产| 成人黄色网址在线观看| 欧美孕妇毛茸茸xxxx| 伊人成年综合网| 国产一区在线精品| 999视频在线免费观看| 四虎精品在永久在线观看 | 久久aaaa片一区二区| www.丝袜精品| 中文字幕在线国产精品| 精品在线视频免费观看| 欧美交换国产一区内射| 欧美激情综合| 国产成人免费91av在线| www.久久综合| 中文字幕精品一区二区精品绿巨人| 日本黄网站色大片免费观看| 国精产品一区一区三区四川| 日韩免费电影一区| 丁香激情五月少妇| 亚洲精品1区| 久久视频在线直播| 亚洲第一在线播放| 国产美女主播视频一区| 日韩福利影院| 密臀av在线播放| 日韩一区二区免费在线观看| 怡红院一区二区三区| 9色精品在线| 成人资源av| 成人黄色网址| 亚洲乱码日产精品bd| 亚洲精品一二三四五区| 婷婷精品在线观看| 午夜精品一区二区三区视频免费看| 91亚洲国产成人精品一区| 久久久久国产精品免费免费搜索| 国产在线播放观看| 97se亚洲| 欧美日韩成人网| 国产又爽又黄又嫩又猛又粗| 国产一区二区伦理片| 日韩亚洲不卡在线| 久久国产精品免费观看| 91在线超碰| 亚洲高清色综合| 伊人国产在线观看| 成人精品国产福利| 久久99久久久久久| 国产精品15p| 高清一区二区三区日本久| 丰满肥臀噗嗤啊x99av| 亚洲激情图片qvod| 日韩av成人网| 日韩视频免费| 免费一区二区三区| 欧洲亚洲两性| 亚洲天堂av在线播放| 97精品在线播放| 免费成人av| 亚洲91av视频| 一级特黄aaaaaa大片| 中文字幕一区二区三区在线观看| 一区二区三区韩国| 国产午夜一区| 日韩av色综合| www.久久网| 国产亚洲精久久久久久| 亚洲 欧美 日韩系列| heyzo久久| 国产精品欧美久久久| 1769在线观看| 欧美日韩久久久一区| 国产一区二区三区在线视频观看| 紧缚奴在线一区二区三区| 成年人黄色在线观看| 高清不卡一区| 久久久99免费视频| 久久亚洲综合国产精品99麻豆精品福利 | 日韩国产在线观看| 欧洲成人一区二区| 欧亚一区二区| 中文字幕在线精品| 国产模特av私拍大尺度| 一区二区三区四区在线| 无码人妻aⅴ一区二区三区玉蒲团| 亚洲三级影院| 欧美专区一二三| 最新亚洲国产| 欧美白人最猛性xxxxx69交| 国产精品91av| 激情视频一区二区三区| 国产精品裸体一区二区三区| 888av在线视频| 亚洲欧美日韩网| 亚洲天堂中文在线| 一区二区在线观看免费| 中国毛片在线观看| 奇米影视一区二区三区小说| aaa免费在线观看| 成人av影音| 国产精品 欧美在线| 羞羞污视频在线观看| 亚洲国产精品悠悠久久琪琪| 国产日本欧美在线观看| 亚洲 欧美 日韩 在线| 日韩理论片在线| 日本精品一二三区| 亚洲一区观看| 在线视频精品一区| 欧美国产亚洲精品| 奇米一区二区三区四区久久| 日本视频在线观看| 亚洲成人亚洲激情| 免费黄色一级大片| 五月天久久比比资源色| 国产又粗又硬视频| 成人在线综合网站| 在线观看国产一级片| 一级成人国产| 日本一区二区三区www| 欧美久久一区二区三区| 日韩av免费看网站| 日本中文字幕中出在线| www.xxxx精品| 欧美另类自拍| 日韩免费在线观看| 一级全黄裸体免费视频| 亚洲成av人**亚洲成av**| 丰满少妇被猛烈进入一区二区| 久久青草国产手机看片福利盒子| 四虎成人在线播放| 一区二区三区韩国免费中文网站| 国产日韩在线一区| 精品网站在线| 亚洲2020天天堂在线观看| 国产原创精品视频| 一区二区在线视频播放| 少妇一区二区三区四区| 欧美一区二区在线不卡| wwwwww在线观看| 欧美性高潮在线| 国产亚洲精品成人| 亚洲狠狠丁香婷婷综合久久久| 东京热无码av男人的天堂| 99这里只有久久精品视频| 精品人妻一区二区三| 国产一区二区在线看| 日韩av片专区| 日欧美一区二区| 99久久久无码国产精品6| 欧美成人一品| 免费网站永久免费观看| 永久亚洲成a人片777777| 亚洲一区二区自拍偷拍| 狠狠操综合网| 蜜桃av噜噜一区二区三| 精品中文一区| 欧美日韩精品免费在线观看视频| 黑人巨大亚洲一区二区久| 亚洲天堂av在线播放| 天天躁日日躁狠狠躁喷水| 亚洲国产精品嫩草影院久久| 亚洲黄色小说网| 日韩精品中文字幕一区二区三区| 一本一道精品欧美中文字幕| 欧美精品v日韩精品v韩国精品v| 伊人中文字幕在线观看 | 久草福利资源在线| 国产精品日日摸夜夜摸av| 中文字幕91视频| 国产精品毛片高清在线完整版| 人妻熟人中文字幕一区二区| 中文字幕欧美国产| 性欧美videos| 亚洲综合视频网| 国产 日韩 欧美 成人| 亚洲中国最大av网站| 91午夜视频在线观看| 疯狂蹂躏欧美一区二区精品| 日韩三级一区二区| 日本韩国一区二区三区| 男人天堂视频网| 欧美视频中文字幕| 夜夜爽8888| 欧美午夜宅男影院| 国产精品国产一区二区三区四区| 91精品久久久久久久99蜜桃| 动漫性做爰视频| 一区二区在线观看视频| 久久免费公开视频| 亚洲国产精品久久不卡毛片 | 91九色成人| 91香蕉亚洲精品| 成人另类视频| 欧美日韩精品免费观看| 91综合久久一区二区| 成人午夜免费剧场| 尹人成人综合网| 国产九九热视频| 大尺度一区二区| 加勒比精品视频| 国产精品三级视频| 亚洲综合一二三| 欧美日韩精品三区| 亚洲精品一区二区三区区别| 亚洲精品国产精品乱码不99按摩 | 国产网站在线看| 91久久精品一区二区二区| 国产精品怡红院| 亚洲精品av在线播放| 电影在线一区| 欧美激情欧美激情| 欧美黑人巨大xxxxx| 成人免费视频网址| 国产传媒欧美日韩成人精品大片| 中文字幕精品一区日韩| 亚洲精品一二| 国产成年人视频网站| 久久免费看少妇高潮| 欧美又粗又大又长| 在线视频亚洲一区| www国产在线| 久久精品久久久久久| 中文字幕成在线观看| 91在线视频精品| 欧美丰满日韩| 女性女同性aⅴ免费观女性恋| 狠狠色丁香婷婷综合| 国产精品无码一区二区三区免费| 一区二区三区.www| 136福利视频导航| 在线播放国产精品| 国产精品国精产品一二| 91精品在线一区| 国产精品国产三级国产在线观看 | 欧美日韩精品电影| 三级在线视频| 国内精品小视频| 欧美理论电影在线精品| 无码人妻精品一区二区三区99v| 日本成人超碰在线观看| 午夜在线观看一区| 午夜精品一区二区三区三上悠亚| 国产精品丝袜黑色高跟鞋| 一本色道久久综合亚洲精品小说 | 午夜精品久久17c| 成人精品毛片| 久久99久久久久久| 国产成人三级在线观看| 麻豆chinese极品少妇| 亚洲一区黄色| 91视频国产一区| 9191国语精品高清在线| 成人免费在线观看视频网站| 久久女同性恋中文字幕| 国产精品99精品无码视| 日韩欧美成人一区| caoporn97在线视频| 青青久久av北条麻妃海外网| 国产精品一区二区av交换| 国产二区视频在线播放| 99久久国产综合精品色伊| 欧美日韩一二三四区| 日韩国产在线播放| 涩涩涩视频在线观看| 欧美二区在线| 久久精品国产清高在天天线| 欧美一区二区三区成人精品| 亚洲精品中文在线影院| 最近中文在线观看| 日韩在线观看视频免费| 婷婷激情成人| 日韩久久久久久久久久久久久| 美女视频黄a大片欧美| 女人18毛片毛片毛片毛片区二 | 亚洲日本成人女熟在线观看| xxxxxx欧美| 日韩国产在线一区| 日韩精品成人一区二区在线| 欧美另类z0zx974| 91精品国产综合久久婷婷香蕉| 伊人222成人综合网| 国产精品一 二 三| 自产国语精品视频| 久久久久久久久久久久国产精品| 亚洲专区一二三| 天天操天天干天天爱| 国产精品视频精品| 亚洲在线久久| 性囗交免费视频观看| 欧美日韩日本视频| 欧美黑人xx片| 牛人盗摄一区二区三区视频| 精品一区二区影视| 久久精品国产亚洲AV无码麻豆| 日韩精品免费在线视频观看| 黄色成人小视频| 欧美a级免费视频| 国产亚洲女人久久久久毛片| 国产自产一区二区| 国产精品第七影院|