0

我试图在我的 .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);

无论 CGPointMake 的 x 和 y 的值是什么,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
4

1 回答 1

0

几件事要检查...

  1. 有效(不是myLayer零)?如果它为 nil,则您的 TMX 文件中没有名为“Middle”的层,或者您的 TMX 文件没有被加载。
  2. myLayer.mapTileSize.widthmyLayer.mapTileSize.height非零?如果它们为零,那么您的 TMX 文件和/或CCTMXTiledMap.

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


编辑:

如果您使用“平铺”来创建 TMX 文件,请进入首选项并将“将平铺图层数据存储为:”从“Base64(gzip 压缩)”更改为“XML”。Cocos2d 无法读取这种 TMX 编码,但这让您可以通过在任何类型的文本编辑器或 Web 浏览器中打开 TMX 文件轻松查看数据。
(如果你不使用 Tiled,我不知道你是如何创建 TMX 文件的,但是去这里获取它:http: //www.mapeditor.org/

更改首选项后,打开并将您的 TMX 文件重新保存到其他位置。您可能应该将其重命名为 -XML.tmx 或其他名称,这样您就不会意外地尝试稍后将其提供给 cocos2d 并想知道为什么它没有加载。;)

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

如果那里的一切看起来都不错,那么您在代码中的某处不小心将此值重置为 0。如果它搞砸了,那么您需要手动调整这个 xml 文件,或者使用正确的 tilesize 值从头开始重新创建您的 TMX 文件。

不要忘记将您在 Tiled 中的首选项更改回“Base64(gzip 压缩)”以将您的工作保存为 cocos2d 可以加载的格式。

于 2012-05-09T23:26:25.517 回答