cocos2dx碰撞檢測實現

2021-07-11 08:30:14 字數 2110 閱讀 9988

在此場景中,我們假設有很多敵人和子彈,其中子彈可以擊中敵人,並且碰撞後子彈和敵人都會隨之消失。

首先,我們需要去追蹤這些敵人和子彈。

我們可以為這兩種物體新增tag,在這裡我們給敵人新增tag=1,給子彈新增tag=2,。因為ccsprite繼承自ccnode,因為已經有了settag和gettag方法;我們可以通過這種方式來區分不同的精靈。

新增兩個成員物件在helloworldscene.h中。用來分別儲存存在的敵人和子彈。

[cpp]view plain

copy

protected

:  cocos2d::ccarray *_targets;  

cocos2d::ccarray *_projectiles;  

在cocos2dx中,在建構函式中初始化這兩個變數,在init()函式中new,在析構函式中release。

[cpp]view plain

copy

// 初始化

_targets = new

ccarray;  

_projectiles = new

ccarray;  

helloworld::~helloworld()  

if(_projectiles)  

// cpp不需要呼叫super釋放,虛析構函式將會做這些事

}  helloworld::helloworld()  

:_targets(null)  

,_projectiles(null)    

現在更改addtarget()來新增乙個新的敵人到targets陣列中,並且把它的tag設定為1.

[cpp]view plain

copy

// 新增到陣列中

target->settag(1);  

_targets->addobject(target);  

更改一下cctouchesended()來新增乙個新的子彈到bullets陣列中,並且設定它的tag為2.

[cpp]view plain

copy

// 新增到_projectiles陣列中

projectile->settag(2);  

_projectiles->addobject(projectile);  

接下來,更改如下的spritemovefinished()函式。這裡我們將從相應的陣列中移除一些精靈。

[cpp]view plain

copy

void

helloworld::spritemovefinished(ccnode* sender)  

else

if(sprite->gettag() == 2) 

// projectile

}  

下面的函式update()將會每幀被執行到一次,一般用來檢測碰撞檢測,可以移除掉碰撞的子彈和敵人。

在helloworldscene.h中宣告它,在helloworldscene.cpp.定義它。

[cpp]view plain

copy

void

helloworld::update(

float

dt)  

}  }  ccarray_foreach(targetstodelete, jt)  

ccarray_foreach(projectilestodelete, it)  

projectilestodelete->release();  

targetstodelete->release();  

好了,最後的事情我們將要做的就是新增update()到計時器中,來讓它每幀被呼叫一次,一般在onenter()函式中新增此行**。

[cpp]view plain

copy

void

helloworld::onenter()    

乙個簡單的碰撞檢測模型就建立好啦~

cocos2dx基礎篇 23 簡單碰撞檢測

嘮叨 本節來講講簡單的物理碰撞檢測 非box2d物理碰撞 矩形 圓之間的碰撞檢測。3.x 將數學類ccpoint ccrect改為v3.x版本的vec2 rect就好了。簡單碰撞檢測 在一些遊戲中經常會遇到碰撞檢測的情況,如憤怒的小鳥飛出去後,是否與石頭發生碰撞。雖然說有乙個box2d物理碰撞引擎,...

cocos2d x如何檢測碰撞

我們的英雄現在可以發射子彈了,但僅僅只是裝飾而已,如何才能殺掉怪物呢?在這一章,我們將介紹碰撞檢測來實現這一效果。首先,跟蹤怪物和子彈是必需的。在遊戲中,我們為這兩種精靈加以不同的tag來區分它們。當tag 1時,表示這是怪物,而tag 2時,則表示這為子彈。由於在ccnode裡面有m ntag這個...

Cocos2d x3 2中 碰撞檢測的實現

cocos2d x中實現簡單碰撞檢測的有rect包圍盒工具,用起來十分便捷。先看 子彈與敵機的碰撞 for int i 0 ipx,nowbullet py 100,nowbullet sp getcontentsize width,nowbullet sp getcontentsize heigh...