《Learn iPhone and iPad Cocos2D Game Development》
1. 根据触摸点的坐标返回瓦片坐标。
//根据触摸点的位置计算瓦片坐标-(CGPoint) tilePosFromLocation:(CGPoint)location tileMap:(CCTMXTiledMap*)tileMap{// Tilemap position must be subtracted, in case the tilemap position is scrolling// 考虑瓦片地图滚动的情况,要减去当前位置CGPoint pos = ccpSub(location, tileMap.position);float halfMapWidth = tileMap.mapSize.width * 0.5f; //地图宽*0.5float mapHeight = tileMap.mapSize.height; //地图高float tileWidth = tileMap.tileSize.width; //瓦片宽float tileHeight = tileMap.tileSize.height; //瓦片高CGPoint tilePosDiv = CGPointMake(pos.x / tileWidth, pos.y / tileHeight);float inverseTileY = mapHeight - tilePosDiv.y;// Cast to int makes sure that result is in whole numbersfloat posX = (int)(inverseTileY + tilePosDiv.x - halfMapWidth);float posY = (int)(inverseTileY - tilePosDiv.x + halfMapWidth);// make sure coordinates are within isomap boundsposX = MAX(0, posX);posX = MIN(tileMap.mapSize.width - 1, posX);posY = MAX(0, posY);posY = MIN(tileMap.mapSize.height - 1, posY);return CGPointMake(posX, posY);}
Calculating the Tile Coordinates from a Touch Location
-(CGPoint) tilePosFromLocation:(CGPoint)location tileMap:(CCTMXTiledMap*)tileMap{ // Tilemap position must be subtracted, in case the tilemap position isscrollingCGPoint pos = ccpSub(location, tileMap.position);float halfMapWidth = tileMap.mapSize.width * 0.5f;float mapHeight = tileMap.mapSize.height;float tileWidth = tileMap.tileSize.width;float tileHeight = tileMap.tileSize.height;CGPoint tilePosDiv = CGPointMake(pos.x / tileWidth, pos.y / tileHeight);float inverseTileY = mapHeight - tilePosDiv.y;// Cast to int makes sure that result is in whole numbersfloat posX = (int)(inverseTileY + tilePosDiv.x - halfMapWidth);float posY = (int)(inverseTileY - tilePosDiv.x + halfMapWidth);// make sure coordinates are within isomap boundsposX = MAX(0, posX);posX = MIN(tileMap.mapSize.width - 1, posX);posY = MAX(0, posY);posY = MIN(tileMap.mapSize.height - 1, posY);return CGPointMake(posX, posY);}