Cocos2d中的平铺地图问题用于垂直滚动游戏

时间:2011-05-12 14:06:11

标签: cocos2d-iphone

我使用Tiled应用程序创建了一个tile map。地图为40X40,tileset大小为32X32。在游戏中,地图向下滚动,给出了汽车正在移动的错觉。在游戏过程中点击地图时,我无法获得Y坐标。我需要将Cocos2d坐标系转换为tileset系统。当瓷砖地图到达终点时,我将汽车再次放在地图的开头。这样地图就会无限延续。在Tiled应用程序中,我可以看到我需要获得的块的坐标是3,19,但是我很难弄清楚如何转换Cocos2d坐标来反映该块。这是我的代码:

- (CGPoint)tileCoordForPosition:(CGPoint)position {

   int x = position.x / self.tiledMap.tileSize.width;

      int y1 = ((self.tiledMap.mapSize.height * self.tiledMap.tileSize.height) - position.y) / self.tiledMap.tileSize.height;

    return ccp(x, y1);
}

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];    

    CGPoint tileCoord = [self tileCoordForPosition:location];
}

1 个答案:

答案 0 :(得分:0)

检查以下链接:http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:tiled_maps?s=tmx

尝试使用CCTMXTiledMap的方法获取CCTMXLayer对象:

/** return the TMXLayer for the specific layer */
-(CCTMXLayer*) layerNamed:(NSString *)layerName;

然后使用以下CCTMXLayer方法之一:

-(CCSprite*) tileAt:(CGPoint)tileCoordinate;
-(uint32_t) tileGIDAt:(CGPoint)tileCoordinate;
-(uint32_t) tileGIDAt:(CGPoint)pos withFlags:(BOOL) flags;