cocos2dx:衝突判定を実装する1回目

cocos2dx:衝突判定を実装する1回目
   

cocos2dxで衝突判定を実装するシリーズとしてこれから3回に分けてブログに書いていきたいと思います。
この辺りは、自分でもこの一ヶ月近く色々試している部分なんですが、何とか形になる部分が自分の中にありますので、それを紹介したいと思います。
ちなみに、タイルマップを利用した衝突判定を書きますので、もし参考にできるものがあれば幸いです。

第一回目は、cocos2dxで衝突判定をするために必要なメソッドなどの紹介をします。


CCPoint

オブジェクトの座標はCCPointクラスで表現されています。
CCPointは下記の方法で作成ができます。

ccp(x,y)
CCPointMake(x,y)


このCCPointは、デバイスのx座標とy座標で表現されています。

例えばCCSpriteクラスでオブジェクトを作成した時には、setPosition()メソッドを利用して座標を決めます。

sprite = CCSprite::create("enemy.png");
sprite->setPosition(ccp(100,100));



デフォルトですと、画像の中心がそれに当たります。
また、アンカーポイントを変更すれば、この位置を修正できます。
Ccpoint


CCRect

CCRectでは、オブジェクトの画像の領域を表せます。
CCRectは以下の方法で作成できます。

CCRectMaKe(x,y,width,height);
sprite->boundingBox();

CCRectMakeでそれぞれの値を指定して上げる方法と、スプライトの画像のCCRectを取り出すboundingBox()を利用します。
既に画像がある場合は、boundingBoxを使うと簡単に導き出せます。

Ccrect


衝突判定で使える2つの方法

上記で説明したCCPointをCCRectを使って、衝突判定を行います。

CCPointとCCRectを使った衝突判定

CCRectクラスにある【containsPoint】を利用すれば、指定されたCCPointがCCRectの領域内に触れた時にtrueを返します。
これを利用すれば、CCRectの領域内に、指定されたCCPointが入った時の判定ができます。


CCPoint point = sprite->getPosition();
CCRect  rect; = enemy->boundingBox();

if(rect.containsPoint(point)){

//trueの場合に、何かしらの処理を行う

}


Point2


CCRectとCCRectを使った衝突判定

CCRectとCCRectの領域が重なった時にtrueを返す【intersectsRect】メソッドを利用します。
利用方法は以下の様な感じです。


CCRect rect = sprite->boundingBox();
CCRect  rect2 = enemy->boundingBox();

if(rect.intersectsRect(rect2){

//trueの場合に、何かしらの処理を行う

}



Rect2



最後に

今回は、cocos2dxの基本的なことを書きました。
次回はタイルマップのレイアーとの衝突判定について書いていきたいと思います。

Cocos2d‐x開発のレシピ―iOS/Android対応Cocos2d‐x開発のレシピ―iOS/Android対応
松浦 晃洋,齊藤 建二,古木 映治

秀和システム
売り上げランキング : 1224

Amazonで詳しく見る

Related Posts Plugin for WordPress, Blogger...