Iphone 基于cocos2d的等距平铺对策问题

Iphone 基于cocos2d的等距平铺对策问题,iphone,ios,cocos2d-iphone,isometric,Iphone,Ios,Cocos2d Iphone,Isometric,我一直在试图弄清楚这场等轴游戏的意义 当我打开一个新的项目并加载相同的地图时,这个特殊的函数会给我不同的结果 -(CGPoint) locationFromTilePos:(CGPoint)tilePos; { CCTMXLayer *grass = [self.tileMap layerNamed:@"Grass"]; CCSprite *tile = [grass tileAt:tilePos]; float x = -tile.position.x - self.t

我一直在试图弄清楚这场等轴游戏的意义

当我打开一个新的项目并加载相同的地图时,这个特殊的函数会给我不同的结果

-(CGPoint) locationFromTilePos:(CGPoint)tilePos;
{
    CCTMXLayer *grass = [self.tileMap layerNamed:@"Grass"];
    CCSprite *tile = [grass tileAt:tilePos];
    float x = -tile.position.x - self.tileMap.tileSize.width + 32;
    float y = -tile.position.y - self.tileMap.tileSize.height;
    return CGPointMake(x, y);
}
当在骑士战斗中以(0,0)的形式在tilePos中进食时

  • 草砖位置:(12481248)
  • 函数返回的最终位置:(-1280,-1280)
  • 在我的fresh项目中将tilePos作为(0,0)输入时

  • 草砖位置:(624624)
  • 函数返回的最终位置:(-656,-656)
  • 我在Cocos2d上找不到任何使用平铺的在线等轴测地图资源。我需要在平铺坐标和真实屏幕坐标之间转换。有人能帮忙吗。

    试试这个: //从平铺坐标计算屏幕坐标

    - (CGPoint)positionForTileCoord:(CGPoint)pos {
    
    float halfMapWidth = _tileMap.mapSize.width*0.5;
    float halfMapHeight = _tileMap.mapSize.height*0.5;
    float tileWidth = _tileMap.tileSize.width;
    float tileHeight = _tileMap.tileSize.height;
    
    int convertedY = _tileMap.mapSize.height-(pos.y-1);
    
    int x = halfMapWidth*tileWidth + tileWidth*pos.x*0.5-tileWidth*pos.y*0.5;
    int y = halfMapHeight*tileHeight +tileHeight*convertedY*0.5 - tileHeight*pos.x*0.5-tileHeight*0.5;
    
    
    return ccp(x, y);
    
    }
    
    相反,试试这个:

    // calculating the tile coordinates from screen location
    
    -(CGPoint) tilePosFromLocation:(CGPoint)location
    {
    CGPoint pos = location;
    float halfMapWidth = _tileMap.mapSize.width*0.5;
    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 invereseTileY = mapHeight - tilePosDiv.y;
    
    // Cast int to make sure that result is in whole numbers
    
    float posX = (int)(invereseTileY + tilePosDiv.x - halfMapWidth);
    float posY = (int)(invereseTileY - tilePosDiv.x + halfMapWidth);
    
    return CGPointMake(posX, posY);
    }
    

    这个项目已经有一年的历史了,正在使用cocos2d iPhone v.99.5,我相信这是在它支持视网膜设备之前。您可以尝试升级cocos2d版本,并修复出现的问题(在本例中,我将升级到1.1,而不是2.x,因为升级路径更容易),好吗?那么值的差异是因为较旧的cocos2d版本?另外,您能给我指一下我可以研究平铺等距地图并访问cocos2d.float posX=(int)(invereseTileY+tilePosDiv.x-halfMapWidth)中坐标的任何资源吗;浮点位置=(int)(invereseTileY-tilePosDiv.x+半映射宽度);没有得到这部分这些将是你的X和Y贴图坐标,根据屏幕坐标计算。我的意思是我不能正确理解逻辑。我完全理解正交贴图的平铺坐标背后的逻辑。我得到了用瓷砖宽度和高度划分触摸坐标的部分。但是下一步是我不明白的。半地图宽度部分是由于地图被SKU了,如果你在纸上画它,你会看到它是如何出现的,因为当你在x轴上移动时,例如你也在Y屏幕坐标下移动。