2012-05-09 8 views
0

我正在尝试在我的.tmx贴图中查找特定瓷砖的像素位置。 CCTMXLayer类的方法positionAt:应该做到这一点,但是每当我尝试使用它时,它都会返回一个带坐标(0,0)的CGPoint ..这是我正在使用的代码的一部分。为什么不会[TMXLayer positionAt: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

几件事情要检查...

  1. myLayer有效(不为零)?如果它为零,您的TMX文件中没有名为“Middle”的图层,或者您的TMX文件未被加载。
  2. myLayer.mapTileSize.widthmyLayer.mapTileSize.height是否为非零?如果它们为零,那么TMX文件和/或您的CCTMXTiledMap的子类就会出现问题。

意见建议: Cocos2d是开源的!设置一个断点,进入CCTMXLayer的代码-(CGPoint) positionAt:(CGPoint)pos,并找出发生了什么事。


编辑:

如果您使用“瓷砖”来创建TMX文件,进入首变“商店瓷砖层的数据为:”从“Base64编码(gzip压缩的)”到“XML”。 Cocos2d无法读取此TMX编码,但这可让您通过在任何类型的文本编辑器或Web浏览器中打开TMX文件来轻松查看数据。
(如果你不使用瓷砖,我不知道你是如何创建TMX文件,但去这里得到它:http://www.mapeditor.org/

改变preferece后,打开并重新保存您的TMX文件某处其他。你可能应该将它重命名为-XML.tmx或其他东西,所以你不会意外尝试将它提供给cocos2d,并想知道为什么不加载它。 ;)

你的图层从地图的tileSize属性中获取属性mapTileSize。该属性从TMX文件的元素中设置。这里有一个例子:<map version="1.0" orientation="orthogonal" width="160" height="96" tilewidth="16" tileheight="16">

如果一切看起来不错,那么你意外地把这个值重置为0,在你的代码的某个地方。如果它搞砸了,那么你需要手动调整这个xml文件,或者用正确的tilesize值重新创建你的TMX文件。

不要忘记在Tiled中将您的偏好设置更改为“Base64(gzip compressed)”,以便以cocos2d可以加载的格式保存您的工作。

+0

我的图层文件不是零。我用if语句检查了它。尽管你的高度和宽度都是正确的。他们都是0,所以有些东西坏了,我只是不知道是什么.. 有没有什么我可能会缺少导出我的tmx文件,打破它,因为tmx文件显示,我只是无法让其属性工作。 – user1371455

+0

@ user1371455检查我的编辑上面的addtl信息/帮助.. – MechEthan

+0

@ user1371455你可以编辑你原来的问题,并添加该代码?它对我没有意义。 – MechEthan