需要转换字符子视图的像素坐标为网格坐标,用以检测用户是否触摸到地图的确定位置。
代码:
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!");
}
但是没有达到预期的结果,请高手指教~
#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];
我就用这段代码解决的。
要看你的map是45度视图的还是平面视图的
平面的单纯是计算问题,关键是要将屏幕触摸坐标,转换成Map节点内坐标
45度的要考验高中数学知识了,是一个二维坐标系变换问题。
2813610155
我QQ,有疑问欢迎交流