學習cocos2d-x之路(6)--Tilemap的碰撞檢測

 Tilemap的碰撞檢測

 

到目前需要檢測兩個部分,一是地圖的邊界,二是地圖中的牆壁。

我的Tilemap分爲兩個圖層,第一層爲地板,第二層爲牆,cocos2d-x提供了函數檢測目標位置是否爲牆。

 

首先將英雄座標轉化爲Tilemap座標 

CCPoint HelloWorld::positionToTileCoord(cocos2d::CCPoint cocosCoord )
{
 int x=cocosCoord.x / map->getTileSize().width;
 int y=(((map->getMapSize().height-1)*map->getTileSize().height )-cocosCoord.y) / map->getTileSize().height;
 return ccp(x,y);
}

 

添加地圖狀態

typedef enum{
  Moveble=0,
  Wall=1,
  Enemy=2
 }CollisionType;

 

添加碰撞檢測函數

HelloWorld::CollisionType HelloWorld::checkCollision(CCPoint heroPotion)
{
 CCPoint tileCoord=positionToTileCoord(heroPotion);

    //檢測是否超出地圖邊界
 if (tileCoord.x<0 || tileCoord.x>map->getMapSize().width-1 ||
  tileCoord.y<0 || tileCoord.y>map->getMapSize().height-1)
  return Wall;

  //判定目標座標是否爲牆壁
 int tileGid=map->layerNamed(”wall")->tileGIDAt(tileCoord);
 if(tileGid)
  return Wall;
 return Moveble;
}

 

 

在menuMoveCallback中進行碰撞檢測

 CCPoint targetPosition=ccpAdd(heroSprite->getPosition(),moveByPosition);
 if(checkCollision(targetPosition)==Wall)
 {
  return;
 }


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章