我正在开发一款使用Cocos2d TMXTiledMap
来阅读Tiled应用程序中生成的等距地图的iOS游戏。
在Tiled中,您可以为图块集中的每个图像添加属性(即显示在屏幕右下角的图像)
使用这些属性来帮助确定游戏角色是否可以遍历此拼贴类型是有意义的。
例如,如果图块3,5使用的是草图,则陆基角色可以在那里行走。
相反,如果牌4,8使用水的图像,那么陆基角色就不能走在那里。
我曾希望通过在称为terrain_type
的草地和水瓦片上创建一个属性来实现这一目标,该属性为0,陆地为1,水为1。然后(我曾希望)我可以在运行时访问tile 3,5并以某种方式知道tile 3,5使用了草图像,其属性为terrain_type=0
现在,我意识到还有其他技术可以完成同样的事情(想象一下Object Layer),但这似乎是最好的方法。特别是当您添加多个切片图层并且您想要知道瓷砖3,5上有草和墙时。
我的问题:这可能吗?我该怎么做呢。或者,我是否误解了Tiled和TMXTiledMap
应该如何工作?
非常感谢...
答案 0 :(得分:2)
惊人。在我发布问题之前,我花了很多时间试图让它工作,当然,几个小时之后,我想出来了。关键是使用CCTMXMapInfo类。
无论如何,这是解决方案,因为我认为这可能对其他人有用:
使用此代码读取位于3,5:
的单个图块的属性//read the tile map
TMXTiledMap *tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"sample_map.tmx"];
//get the bottom layer from the tileMap
CCTMXLayer *bottomLayer = [tileMap layerNamed:@"bottom"];
//get CCTMXMapInfo object -- TMXTiledMap DOES NOT Contain the tile image properties
CCTMXMapInfo * mapInfo = [CCTMXMapInfo formatWithTMXFile: @"sample_map.tmx"];
//get tile id of the tile image used at this coordinate (3, 5) in this layer
int tileID = [bottomLayer tileGIDAt: ccp(3, 5)];
//get the properties for that tile image
NSDictionary *properties = [mapInfo.tileProperties objectForKey:[NSNumber numberWithInt:tileID] ];
//get the terrain_type property
NSString *terrainType = [properties objectForKey:@"terrain_type"];