1

我正在尝试将我的角色精灵的像素坐标转换为网格坐标,以便我可以检查用户是否正在触摸地图上的某个图块。

这是我的代码:

CGPoint mappos = [tileMapNode convertToNodeSpace:position];
mappos.x = (int) mappos.x / tileWidth;
mappos.y = (int) mappos.y / tileWidth;

CCTMXLayer *metaLayer = [tileMapNode layerNamed:@"Meta"];
CCSprite *metaTile = [metaLayer tileAt:ccp(mappos.x, mappos.y)];

if (metaTile)
{
    NSLog(@"HIT!");
}

由于某种原因,字符位置与网格坐标没有正确对齐。这是为什么?

4

1 回答 1

0

我使用了这个并且在所有情况下都有效。

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

#define TILE_SIZE       ( IS_IPAD ? 64 : 32 )
#define TILE_IN_ROW     ( IS_IPAD ? 19 : 19 )
#define TILE_IN_COL     ( IS_IPAD ? 32 : 30 )

#define TILE_MAP_HEIGHT  (TILE_IN_COL*TILE_SIZE) 

#define PP_TILE_META_LAYER      @"Meta"
#define PP_TILE_MAP_BG_LAYER    @"Background"



- (CGPoint)getTileCoordForPosition:(CGPoint)position
{
    int maxTileCol = self.mapSize.height; 

    int x = ( (position.x-self.position.x)/TILE_SIZE);
    int y = maxTileCol - ( ((position.y)-self.position.y)/TILE_SIZE);

    if( x >= TILE_IN_ROW)
        x = TILE_IN_ROW - 1;

    if( y >= TILE_IN_COL)
        y = TILE_IN_COL - 1;

    return ccp(x, y);

}


    mBgLayer = [self layerNamed:PP_TILE_MAP_BG_LAYER];

    CGPoint point = [self getTileCoordForPosition:position];
    CCSprite *sprite = [mBgLayer tileAt:point];
于 2013-06-25T05:14:39.073 回答