国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

cocos2d-x如何檢測碰撞

移動開發 iOS Android 游戲開發
我們的英雄現在可以發射子彈了,但僅僅只是裝飾而已,如何才能殺掉怪物呢?在這一章,我們將介紹碰撞檢測來實現這一效果。

首先,跟蹤怪物和子彈是必需的。

在游戲中,我們為這兩種精靈加以不同的tag來區分它們。當tag=1時,表示這是怪物,而tag=2時,則表示這為子彈。由于在CCNode里面有m_nTag這個成員變量,并且有setTag和getTag方法,因此CCSprite就繼承了這些方法,我們可以利用之。

在HelloWorldScene.h中,把以下兩個成員變量加入到HelloWorld下,這兩個成員變量用于緩存現有的怪物和子彈。

1// cpp with cocos2d-x

2protected:

3 cocos2d::CCMutableArray *_targets;

4 cocos2d::CCMutableArray *_projectiles;

1// objc with cocos2d-iphone

2 NSMutableArray *_targets;

3 NSMutableArray *_projectiles;

在cocos2d-x里,CCMutableArray相當于iOS SDK中的NSMutableArray,該數組里的成員可以是NSObject或者他們的子類。但不同的是,你必須告訴它里面要放的是哪種具體的類型。

之后構造函數中初始化這兩個變量,在init()中new 它們,并在析構函數中release 它們。

1// cpp with cocos2d-x

2

3// in init()

4// Initialize arrays

5_targets = new CCMutableArray;

6_projectiles = new CCMutableArray;

7

8HelloWorld::~HelloWorld()

9{

10 if (_targets)

11 {

12 _targets->release();

13 _targets = NULL;

14 }

15

16 if (_projectiles)

17 {

18 _projectiles->release();

19 _projectiles = NULL;

20 }

21

22 // cpp don't need to call super dealloc

23 // virtual destructor will do this

24}

25

26HelloWorld::HelloWorld()

27:_targets(NULL)

28,_projectiles(NULL)

29{

30}

1// objc with cocos2d-iphone

2// in init()

3// Initialize arrays

4_targets = [[NSMutableArray alloc] init];

5_projectiles = [[NSMutableArray alloc] init];

6

7- (void) dealloc

8{

9 [_targets release];

10 _targets = nil;

11

12 [_projectiles release];

13 _projectiles = nil;

14

15 // don't forget to call "super dealloc"

16 [super dealloc];

17}

現在可以修改addTarget(),把新目標添加到目標數組中,并設置其tag為1。

1// cpp with cocos2d-x

2// Add to targets array

3target->setTag(1);

4_targets->addObject(target);

1// objc with cocos2d-iphone

2// Add to targets array

3target.tag = 1;

4[_targets addObject:target];

修改ccTouchesEnded(),把新子彈加入到子彈數組中,并設置其tag為2。

1// cpp with cocos2d-x

2// Add to projectiles array

3projectile->setTag(2);

4_projectiles->addObject(projectile);

1// objc with cocos2d-iphone

2// Add to projectiles array

3projectile.tag = 2;

4[_projectiles addObject: projectile];

之后,按下面修改spriteMoveFinished()。這里根據標記的不同,在對應的數組中移除精靈

1// cpp with cocos2d-x

2void HelloWorld::spriteMoveFinished(CCNode* sender)

3{

4 CCSprite *sprite = (CCSprite *)sender;

5 this->removeChild(sprite, true);

6

7 if (sprite->getTag() == 1) // target

8 {

9 _targets->removeObject(sprite);

10 }

11 else if (sprite->getTag() == 2) // projectile

12 {

13 _projectiles->removeObject(sprite);

14 }

15}

1// objc with cocos2d-iphone

2-(void)spriteMoveFinished:(id)sender

3{

4 CCSprite *sprite = (CCSprite *)sender;

5 [self removeChild:sprite cleanup:YES];

6

7 if (sprite.tag == 1) // target

8 {

9 [_targets removeObject:sprite];

10 }

11 else if (sprite.tag == 2) // projectile

12 {

13 [_projectiles removeObject:sprite];

14 }

15}

下面的update()函數用于檢測每幀的碰撞,并從游戲中刪除碰撞中的子彈和怪物。

請在HelloWorldScene.h中聲明,在HelloWorldScene.cpp中定義。

1// cpp with cocos2d-x

2void HelloWorld::update(ccTime dt)

3{

4 CCMutableArray *projectilesToDelete =

5 new CCMutableArray;

6 CCMutableArray::CCMutableArrayIterator it, jt;

7

8 for (it = _projectiles->begin(); it != _projectiles->end(); it++)

9 {

10 CCSprite *projectile =*it;

11 CCRect projectileRect = CCRectMake(

12 projectile->getPosition().x

13 - (projectile->getContentSize().width/2),

14 projectile->getPosition().y

15 - (projectile->getContentSize().height/2),

16 projectile->getContentSize().width,

17 projectile->getContentSize().height);

18

19 CCMutableArray*targetsToDelete

20 = new CCMutableArray;

21

22 for (jt = _targets->begin(); jt != _targets->end(); jt++)

23 {

24 CCSprite *target =*jt;

25 CCRect targetRect = CCRectMake(

26 target->getPosition().x - (target->getContentSize().width/2),

27 target->getPosition().y - (target->getContentSize().height/2),

28 target->getContentSize().width,

29 target->getContentSize().height);

30

31 if (CCRect::CCRectIntersectsRect(projectileRect, targetRect))

32 {

33 targetsToDelete->addObject(target);

34 }

35 }

36

37 for (jt = targetsToDelete->begin();

38 jt != targetsToDelete->end();

39 jt++)

40 {

41 CCSprite *target =*jt;

42 _targets->removeObject(target);

43 this->removeChild(target, true);

44 }

45

46 if (targetsToDelete->count() >0)

47 {

48 projectilesToDelete->addObject(projectile);

49 }

50 targetsToDelete->release();

51 }

52

53 for (it = projectilesToDelete->begin();

54 it != projectilesToDelete->end();

55 it++)

56 {

57 CCSprite* projectile =*it;

58 _projectiles->removeObject(projectile);

59 this->removeChild(projectile, true);

60 }

61 projectilesToDelete->release();

62}

1// objc with cocos2d-iphone

2- (void)update:(ccTime)dt

3{

4 NSMutableArray *projectilesToDelete

5 = [[NSMutableArray alloc] init];

6

7 for (CCSprite *projectile in _projectiles)

8 {

9

10 CGRect projectileRect = CGRectMake(

11 projectile.position.x - (projectile.contentSize.width/2),

12 projectile.position.y - (projectile.contentSize.height/2),

13 projectile.contentSize.width,

14 projectile.contentSize.height);

15

16 NSMutableArray *targetsToDelete

17 = [[NSMutableArray alloc] init];

18

19 for (CCSprite *target in _targets)

20 {

21

22 CGRect targetRect = CGRectMake(

23 target.position.x - (target.contentSize.width/2),

24 target.position.y - (target.contentSize.height/2),

25 target.contentSize.width,

26 target.contentSize.height);

27

28 if (CGRectIntersectsRect(projectileRect, targetRect))

29 {

30 [targetsToDelete addObject:target];

31 }

32 }

33

34 for (CCSprite *target in targetsToDelete)

35 {

36

37 [_targets removeObject:target];

38 [self removeChild:target cleanup:YES];

39 }

40

41 if (targetsToDelete.count >0)

42 {

43 [projectilesToDelete addObject:projectile];

44 }

45 [targetsToDelete release];

46 }

47

48 for (CCSprite *projectile in projectilesToDelete)

49 {

50

51 [_projectiles removeObject:projectile];

52 [self removeChild:projectile cleanup:YES];

53 }

54 [projectilesToDelete release];

55}

好了,最后一件事,我們要把update()加入到schedule里讓它每幀都能被調用。

1// cpp with cocos2d-x

2this->schedule( schedule_selector(HelloWorld::update) );

1// objc with cocos2d-iphone

2[self schedule:@selector(update:)];

編譯并運行項目,盡情地發射子彈吧,這時:啊哈,怪物都一個接著一個地被干掉了。

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

2011-12-12 10:40:08

Cocos2d-X游戲開發開發環境

2012-04-17 12:38:46

cocos2d-x

2013-05-22 15:49:46

2012-04-17 12:47:27

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開發

2014-07-31 16:57:30

2013-12-03 10:58:50

Cocos2D-X磚塊地圖

2013-05-22 14:38:44

iOS開發Cocos2d-x坐標系統

2013-06-03 17:04:20

CocoStudioCocos2D-X添加CocoStudi

2012-04-17 12:58:44

Cocos2D-X

2012-02-19 20:10:23

Cocos2d-x fCocos2dWindows Pho

2013-11-13 16:31:32

Cocos2d-x

2012-05-09 10:09:57

Cocos2d-xAndroidiOS

2013-06-07 14:06:52

移動開發Android開發cocos2d-x

2012-04-17 13:12:00

2014-08-13 10:07:02

游戲引擎

2014-08-14 10:06:14

Cocos2d-x

2012-04-17 09:30:45

cocos2d-x創建
點贊
收藏

51CTO技術棧公眾號

caoporen人人| 欧美成人自拍| 欧美性猛交xxxx乱大交退制版| 欧美 日韩 国产一区| 免费在线观看成人av| 国产精品久久久久久久久久小说 | 久久久久99| 成人午夜电影在线播放| 外国成人在线视频| 欧美国产在线电影| 欧美午夜网站| 少妇精69xxtheporn| 性欧美超级视频| 尤物tv国产一区| 欧洲成人一区| 久久综合免费视频| 欧美影院在线| 4438全国成人免费| 波多野结衣在线观看一区二区| 国产精品第一视频| 久久中文字幕av一区二区不卡| 国产欧美精品一区二区三区-老狼| 久久亚州av| 热久久免费视频精品| 精品国产乱码久久久久久蜜坠欲下| 欧美一区二区视频97| 亚洲毛片免费看| 国产91露脸中文字幕在线| 免费成人高清在线视频theav| 国产91网红主播在线观看| 久久综合成人| 国产日韩精品久久| 理论电影国产精品| 免费国产黄色网址| 中文字幕乱码久久午夜不卡| 美日韩黄色片| 色婷婷久久久久swag精品| 国产秀色在线www免费观看| 日韩视频永久免费| 香蕉视频亚洲一级| 欧美日韩成人在线播放| 九九精品在线| 久久精品二区| 大陆成人av片| 国产偷激情在线| 制服丝袜国产精品| 亚洲电影有码| 国产精品高潮呻吟久久av野狼| 综合激情视频| 伊人久久av导航| 欧美国产日韩一二三区| 日本一二三区在线视频| 91麻豆精品国产91久久久久久久久| 免费电影日韩网站| 91精品国产成人| 亚洲一级网站| 福利在线一区二区| 亚洲v中文字幕| 欧美xxxx视频| 97视频免费在线观看| 亚洲激情在线| 嫩草av久久伊人妇女超级a| 色呦呦日韩精品| 日韩经典一区| 91色精品视频在线| 国产精品一区在线| 最新中文字幕av专区| 亚洲黄色www| 色婷婷综合久久久久久| 特级西西444www大精品视频| 亚洲丝袜自拍清纯另类| av网站在线看| 久久久亚洲国产天美传媒修理工| 999亚洲国产精| 欧美性猛交xxx乱久交| 欧美精三区欧美精三区| 国产精品极品| 亚洲福利av在线| 亚洲综合免费观看高清完整版| 欧美aaaaa性bbbbb小妇| 国产精品美乳一区二区免费| 国产精品99久久久久久似苏梦涵| 在线免费福利| 久久久精品影院| 久久成人一区| 麻豆影视在线观看| 久久精品视频在线播放| 久久青草久久| 欧美白嫩的18sex少妇| 最近中文字幕2019免费| 日韩一级免费| 超碰在线免费看| 欧美一级本道电影免费专区| www.成年人视频| 91精品91久久久中77777| 国产精久久久| 青青草原国产免费| 在线观看91视频| 丝袜久久网站| 日本免费不卡一区二区| 日韩精品中文字幕一区| 国产精品久久久久久久免费观看| 国产精品天天av精麻传媒| 亚洲精品有码在线| 国产精品毛片在线| 激情小说 在线视频| 欧美在线视频a| 99久久久精品免费观看国产蜜| www在线看| 久久精品国产精品青草色艺| 天天影视网天天综合色在线播放| 高清精品xnxxcom| 黄色网页免费在线观看| 日韩精品免费在线视频观看| 久久大逼视频| 国产福利视频在线| 国产福利一区二区三区在线观看| 天天射综合影视| 日韩av久操| 老司机aⅴ毛片免费观看| 精品少妇v888av| 成人精品在线视频观看| 天堂中文在线播放| 亚洲精品高清国产一线久久| 欧美美女直播网站| 欧美国产三级| 青青草手机在线| 91在线观看免费观看| 亚洲伊人色欲综合网| 一区二区三区日本久久久| 亚洲精品自拍网| 性色av一区二区三区免费| 国产欧美一区二区在线观看| 日韩中文字幕无砖| xx欧美撒尿嘘撒尿xx| 久久免费视频这里只有精品| 国产精品网站导航| 伊人久久大香线蕉av不卡| 成人福利资源| 成人疯狂猛交xxx| 色综合激情五月| 精品白丝av| 图片区小说区亚洲| 性做爰过程免费播放| 中文字幕免费国产精品| 99国产精品99久久久久久| 在这里有精品| 蜜桃av成人| 久久日韩精品| 亚洲大胆人体在线| 懂色av一区二区在线播放| 亚洲小说春色综合另类电影| 日本在线免费观看视频| 成人自拍视频网站| 日韩三级高清在线| 国产高清在线精品| 欧美一区自拍| 国模精品一区二区| 亚洲一区二区三区精品在线观看| 在线成人激情视频| **网站欧美大片在线观看| 欧美一区久久| 天堂网在线最新版www中文网| 久久久久久香蕉| 国产精品久久久久久中文字| 在线免费不卡电影| 国产一区二区三区四区在线观看| 经典三级一区二区| 播九公社成人综合网站| av蓝导航精品导航| 亚洲欧美一区二区三区在线| 国产精品污网站| 亚洲人成久久| 久久天堂影院| 又黄又爽在线观看| 一区二区视频在线免费| 久久人人爽人人爽人人片av高清| 一本色道久久综合精品竹菊| 久久精品久久精品| 欧美尿孔扩张虐视频| 秋霞午夜理伦电影在线观看| 人妻av无码专区| 国产美女精彩久久| 亚洲免费电影一区| 亚洲黄色免费电影| 日韩av成人高清| 在线日韩网站| 182在线视频观看| 免费看av大片| 奇米777四色影视在线看| 国产成一区二区| 国产丝袜视频一区| 亚洲一区二区三区自拍| 免费观看成人鲁鲁鲁鲁鲁视频| 日韩高清在线免费观看| 欧洲亚洲精品视频| 91高清视频在线观看| 夜夜嗨av一区二区三区免费区| 亚洲青青青在线视频| 免费成人在线网站|