2013-06-24 3 views
1

내 캐릭터 스프라이트의 픽셀 좌표를 그리드 좌표로 변환하여 사용자가지도에서 특정 타일을 터치하는지 확인할 수 있도록하려고합니다. 문자 위치가 바로 그리드 좌표와 제대로 일치하지 않는 몇 가지 이유를 들어CCTMXTiledMap의 픽셀을 그리드로 변환

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

:

여기 내 코드입니다. 왜 그런가요?

답변

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]; 
+0

나는 그것을 – Sneaksta

+0

은 '자기'매개 변수는 'getTileCoordForPosition'기능의 코드 무엇을 참조하고 :) 몇 시간 만에 갈 줄거야? 내게는 '자기'를 내 CCTMXTiledMap 변수로 바꿔야합니다. 비록 내가 그렇게해도 좌표는 여전히 작동하지 않는다. – Sneaksta

+0

그렇다. 그것이 CCTMXTiledMap 객체이다. – Guru