我正在尝试在.tmx地图中找到特定图块的像素位置。 CCTMXLayer类的方法positionAt:应该可以解决问题,但每当我尝试使用它时,它都会返回一个坐标为(0,0)的CGPoint。这是我正在使用的代码的一部分。
// CCTMXTiledMap Declaration using my class MapLayer
//which inherits from CCTMXTiledMap
MapLayer *tileMap = [MapLayer node];
CCTMXLayer *myLayer = [tileMap layerNamed: @"Middle"];
NSLog(@"%i", [myLayer positionAt: CGPointMake(x,y)].x);
NSLog(@"%i", [myLayer positionAt: CGPointMake(x,y)].y);
无论x和y的值是CGPointMake的值,CGPoint(0,0)的值都会记录下来,我不明白为什么。
编辑:
我刚刚用地图声明我的图层错了吗?这是我的代码。
//init method for MapLayer.m class file
@implementation MapLayer
-(id) init {
if( (self=[super initWithTMXFile: @"ZombearTilemap.tmx"])) {
}
return self;
}
//in my MainScene.m class init method
MapLayer *tileMap = [MapLayer node];
[self addChild: tileMap];
CCTMXLayer *tileMapLayer = [tileMap layerNamed: @"Middle"];
// (tileMapLayer == nil) returns false
//tileMap.mapSize.width returns 0
//[[tileMapLayer tileAt:ccp(x,y)] boundingBox].size.height returns 0
答案 0 :(得分:0)
要检查的事情......
myLayer
有效(不是零)吗?如果它为零,则TMX文件中没有名为“Middle”的图层,或者您的TMX文件未加载。 myLayer.mapTileSize.width
和myLayer.mapTileSize.height
是否为非零?如果它们为零,那么您的TMX文件和/或CCTMXTiledMap
的子类就会出现问题。 一般建议: Cocos2d是开源的!设置一个断点,进入CCTMXLayer
的{{1}}代码,找出那里发生的事情。
编辑:
如果您使用“Tiled”创建TMX文件,请进入“首选项”并将“将图块层数据存储为:”从“Base64(压缩gzip)”更改为“XML”。 Cocos2d无法读取此TMX编码,但这可以通过在任何类型的文本编辑器或Web浏览器中打开TMX文件轻松查看数据。 (如果您没有使用Tiled,我不知道您是如何创建TMX文件的,但请在此处获取:http://www.mapeditor.org/)
更改优先顺序后,打开并将TMX文件重新保存到其他位置。您可能应该将其重命名为-XML.tmx或其他内容,因此您不会在以后偶然尝试将其提供给cocos2d,并想知道为什么不加载它。 ;)
您的图层将从地图的-(CGPoint) positionAt:(CGPoint)pos
媒体资源中获取mapTileSize
媒体资源。此属性是从TMX文件的元素设置的。这是一个例子:tileSize
如果一切看起来都不错,那么您不小心将此值重置为0,即代码中的某个位置。如果它搞砸了,那么您需要手动调整此xml文件,或者使用正确的tileize值从头开始重新创建TMX文件。
不要忘记将Tiled中的首选项更改回“Base64(压缩gzip)”,以cocos2d可以加载的格式保存您的工作。