首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

斜角tmx 舆图 根据点击坐标计算tmx坐标算法

2012-06-29 
斜角tmx 地图 根据点击坐标计算tmx坐标算法?-(CGPoint) tilePosFromLocation:(CGPoint)location tileMap:(

斜角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

热点排行