斜角tmx 地图 根据点击坐标计算tmx坐标算法
?
-(CGPoint) tilePosFromLocation:(CGPoint)location tileMap:(CCTMXTiledMap*)tileMap{// Tilemap position must be subtracted, in case the tilemap position is not at 0,0 due to scrolling//如果是retina屏幕,需要将像素乘2CGPoint 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 numbers, tile coordinates will be used as array indicesfloat 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);pos = CGPointMake(posX, posY);CCLOG(@"touch at (%.0f, %.0f) is at tileCoord (%i, %i)", location.x, location.y, (int)pos.x, (int)pos.y);//CCLOG(@"\tinverseY: %.2f -- tilePosDiv: (%.2f, %.2f) -- halfMapWidth: %.0f\n", inverseTileY, tilePosDiv.x, tilePosDiv.y, halfMapWidth);return pos;}
?
算法的解释:http://www.gandraxa.com/isometric_projection.xml