COCOS道場DX
ホームに戻る
スポンサーリンク

オブジェクトの接触判定


今回はオブジェクト(画像や文字など)の接触判定について紹介したいと思います。
当たり判定は大きく分けると矩形同士の判定と矩形とポイントの判定があります、cocos2d-xでは標準でそれらの接触判定を行う関数があるのでそれらを利用して判定を行います。まずは当たり判定のイメージを図でみてみましょう。

そして当たり判定が行われる時のイメージはこのような感じです。


まずは矩形同士の接触判定です

Rect rect1,rect2;
  
//矩形同士の当たり判定
if(rect1.intersectsRect(rect2)){
    log("接触しています");
}

次に矩形とポイントの接触判定です
Rect rect;
Point point;
  
//矩形とポイントの当たり判定
if(rect.containsPoint(point)){
    log("接触しています");
}

こんなに簡単にできるとはさすがcocos2d-xですね。
では、せっかくなので画像同士の接触判定もやってみたいと思います。
 //画面サイズの取得
    Size size = Director::getInstance()->getVisibleSize();

    //四角画像を2枚貼り付ける
    auto box1=Sprite::create("box1.png");
    auto box2=Sprite::create("box2.png");
    box1->setPosition(Vec2(size.width/3,size.height/2));
    box2->setPosition(Vec2(size.width/3*2,size.height/2));
    this->addChild(box1);
    this->addChild(box2);

    //画像から矩形サイズを取得する
    auto rect1=box1->getBoundingBox();
    auto rect2=box2->getBoundingBox();

    //結果判定用ラベル
    auto result=Label::create();
    result->setPosition(Vec2(size.width/2,size.height/7));
    result->setScale(3.0f);
    result->setString("接触していません");
    this->addChild(result);
    
    //もし接触していたらラベルの文字を変更
    if(rect1.intersectsRect(rect2)){
        result->setString("接触しています!");
    }

実行結果:

次に8行目を変更して画像を重ねて実行すると...

ちゃんと接触判定ができているのが確認できました、ここまで実質関数を2つ覚えればいいだけなのでとても簡単ですね。

スポンサーリンク
このエントリーをはてなブックマークに追加
前の章へ ホームに戻る 次の章へ