Cocos2d iphone 为什么赢了';t[TMXLayer positionAt:CGPoint]对我有用吗?

Cocos2d iphone 为什么赢了';t[TMXLayer positionAt:CGPoint]对我有用吗?,cocos2d-iphone,position,cgpoint,tmx,Cocos2d Iphone,Position,Cgpoint,Tmx,我试图在我的.tmx贴图中找到特定分幅的像素位置。CCTMXLayer类的positionAt:方法应该可以做到这一点,但是每当我尝试使用它时,它都会返回一个带有坐标(0,0)的CGPoint。。这是我正在使用的代码的一部分 // CCTMXTiledMap Declaration using my class MapLayer //which inherits from CCTMXTiledMap MapLayer *tileMap = [MapLayer node];

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

要检查的几件事

  • myLayer
    是否有效(不是零)?如果为nil,则TMX文件中没有名为“Middle”的层,或者没有加载TMX文件
  • myLayer.mapTileSize.width和myLayer.mapTileSize.height是否为非零?如果它们为零,那么您的TMX文件和/或
    CCTMXTiledMap
    的子类中的某些内容就非常糟糕
  • 一般建议:Cocos2d是开源的!设置一个断点,进入
    CCTMXLayer
    -(CGPoint)位置的代码:(CGPoint)pos
    ,并了解其中的情况


    编辑:

    如果使用“平铺”创建TMX文件,请进入首选项并将“将平铺层数据存储为:”从“Base64(gzip压缩)”更改为“XML”。Cocos2d无法读取此TMX编码,但通过在任何类型的文本编辑器或web浏览器中打开TMX文件,您都可以轻松查看数据。
    (如果您没有使用Tiled,我不知道您是如何创建TMX文件的,但请在此处获取它:)

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

    您的图层将从地图的
    tileSize
    属性中获取其
    mapTileSize
    属性。此属性从TMX文件的元素中设置。这里有一个例子:

    如果那里一切正常,那么您在代码的某个地方意外地将该值重置为0。如果它搞砸了,那么您需要手动调整这个xml文件,或者使用正确的tilesize值从头开始重新创建TMX文件


    别忘了将“平铺”中的首选项更改回“Base64(gzip压缩)”,以cocos2d可以加载的格式保存您的工作。

    我的图层文件不是零。我用if语句检查了一下。不过,关于高度和宽度,你是对的。他们都是0,所以有些东西坏了,我不知道是什么。。在导出tmx文件时,是否有什么东西可能会丢失,从而导致文件损坏,因为tmx文件出现了,我只是无法使其属性正常工作。@user1371455您能编辑您原来的问题帖子并添加该代码吗?这对我来说毫无意义。我解决了我的问题。当我使用NSLog时,我把数字打错了。我使用了%I和%d,得到了奇怪的结果。当我使用%1.x时,数字开始正确显示。