Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将等轴测平铺贴图坐标转换为屏幕坐标_Ios_Objective C_Cocos2d Iphone_Isometric_Tmx - Fatal编程技术网

Ios 将等轴测平铺贴图坐标转换为屏幕坐标

Ios 将等轴测平铺贴图坐标转换为屏幕坐标,ios,objective-c,cocos2d-iphone,isometric,tmx,Ios,Objective C,Cocos2d Iphone,Isometric,Tmx,我正在尝试将等距平铺坐标转换为屏幕坐标。 我似乎有问题,尤其是Y坐标,看起来X部分工作得很好。这是我到目前为止得到的 // calculate screen coordinates from tile coordinates - (CGPoint)positionForTileCoord:(CGPoint)pos { float halfMapWidth = _tileMap.mapSize.width*0.5; float mapHeight = _tileMap.mapSize.heig

我正在尝试将等距平铺坐标转换为屏幕坐标。 我似乎有问题,尤其是Y坐标,看起来X部分工作得很好。这是我到目前为止得到的

// calculate screen coordinates from tile coordinates

- (CGPoint)positionForTileCoord:(CGPoint)pos {

float halfMapWidth = _tileMap.mapSize.width*0.5;
float mapHeight = _tileMap.mapSize.height;
float tileWidth = _tileMap.tileSize.width;
float tileHeight = _tileMap.tileSize.height;


int x = halfMapWidth*tileWidth + tileWidth*pos.x*0.5-tileWidth*pos.y*0.5;

int y =  ............


return ccp(x, y);
我的播放器作为一个子添加到平铺贴图本身,贴图以screenSize.x/2,scrensize.y/2的形式添加到图层,锚定点为0.5

我已经成功地用正交贴图做了同样的事情,但似乎在用等距贴图


谢谢你

真的是这样的:

int y = (pos.y + (mapHeight * tileWidth/2) - (tileHeight/2)) - ((pos.y + pos.x) *   tileHeight/2) + tileHeight;
  // calculate screen coordinates from tile coordinates
    - (CGPoint)positionForTileCoord:(CGPoint)pos {

        float halfMapWidth = _tileMap.mapSize.width*0.5;
        float mapHeight = _tileMap.mapSize.height;
        float tileWidth = _tileMap.tileSize.width;
        float tileHeight = _tileMap.tileSize.height;


        int x = halfMapWidth*tileWidth + tileWidth*pos.x*0.5-tileWidth*pos.y*0.5;

        int y = (pos.y + (mapHeight * tileWidth/2) - (tileHeight/2)) - ((pos.y + pos.x) *   tileHeight/2) + tileHeight;   

        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);
    }

实际上,它看起来是这样的:

  // calculate screen coordinates from tile coordinates
    - (CGPoint)positionForTileCoord:(CGPoint)pos {

        float halfMapWidth = _tileMap.mapSize.width*0.5;
        float mapHeight = _tileMap.mapSize.height;
        float tileWidth = _tileMap.tileSize.width;
        float tileHeight = _tileMap.tileSize.height;


        int x = halfMapWidth*tileWidth + tileWidth*pos.x*0.5-tileWidth*pos.y*0.5;

        int y = (pos.y + (mapHeight * tileWidth/2) - (tileHeight/2)) - ((pos.y + pos.x) *   tileHeight/2) + tileHeight;   

        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);
    }

在纸上画画来组织你的思维——通常是有帮助的。在纸上画画来组织你的思维——通常是有帮助的。