Для более простого, но мощного обнаружения столкновений вам, скорее всего, понадобится физический движок.
Я рекомендую расширение SpaceManager для двигателя Бурундука.
В Tiled вы можете добавить объектный слой в файл tmx, где вы можете выделить все препятствия.
Вот как я анализирую эту информацию в моей игровой сцене:
в init:
self.tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"TileMap.tmx"];
...
smgr = [[SpaceManagerCocos2d alloc] init];
smgr.constantDt = 1/60.0;
smgr.gravity=ccp(0, 0);
[smgr addWindowContainmentWithFriction:0.0 elasticity:0.0 size:CGSizeMake(1000, 1000) inset:cpvzero radius:1.0f]; //borders of your world, can be set from tmx size
player = [smgr addCircleAt:ccp(x,y) mass:6 radius:15];
и где-то:
- (void) drawWalls {
//searching for object layer called "Collisions"
CCTMXObjectGroup *objects = [_tileMap objectGroupNamed:@"Walls"];
NSMutableDictionary * objPoint;
int x ;
int y ;
int w ;
int h ;
for (objPoint in [objects objects]) {
x = [[objPoint valueForKey:@"x"] intValue];
y = [[objPoint valueForKey:@"y"] intValue];
w = [[objPoint valueForKey:@"width"] intValue];
h = [[objPoint valueForKey:@"height"] intValue];
GameController *controller = [GameController sharedController];
if(controller.retina==1)
{
x=x/2;
y=y/2;
w=w/2;
h=h/2;
}
cpShape *staticShape = [smgr addRectAt:ccp(x+w/2,y+h/2) mass:STATIC_MASS width:w height:h rotation:0];
}
}
Затем вы можете применить силу к объекту "игрок" и обновить свою позицию спрайта методом "update":
playerSprite.position=ccp(player->body->p.x, player->body->p.y);
Конечно, вы можете использовать какой-то другой алгоритм для обнаружения столкновения, но это всего лишь пример хранения и извлечения этой информации из tmx.