如何从.tmx TileMap文件中获取SpriteKit PhysicsBodies

时间:2014-02-02 19:17:08

标签: ios sprite-kit

我想要的用法是:

  1. 使用Tiled创建.tmx地图,该地图指定SpriteKit中将成为PhysicsBody个对象的背景和起始位置
  2. 使用JSTileMap阅读.tmx并显示
  3. 在JSTileMap制作的tilemap对象中,引用适当的图层/对象/无论转化为各种PhysicsBody对象,其位置现在由物理引擎控制
  4. 我已成功完成1.和2.上面但我坚持3.我可以引用一个图层或对象,但是当我甚至尝试一个简单的测试来改变它的位置时(使用setPosition它崩溃了。

    我非常愿意使用JSTileMap之外的其他东西,如果这样做的话,最终的目标是从.tmx中获取可操作的图层/对象更容易。

2 个答案:

答案 0 :(得分:7)

我是JSTileMap的维护者。我有一个大约一个月前做过的示例项目,它有一些你在这里谈论的例子。欢迎您查看我的代码:https://dl.dropboxusercontent.com/u/14626689/Platformer%20Test%201.zip

它应该为您提供您正在寻找的大部分答案,并对JSTileMap进行一些尚未发布的轻微调整。

答案 1 :(得分:1)

根据slycrel提供的示例项目,看起来这是与我的问题相关的代码片段:

TMXLayerInfo* layerInfo = [self.tileMap.layers firstObject];
        CGPoint pt = CGPointMake(a, b);
        NSInteger gid = [layerInfo.layer tileGidAt:[layerInfo.layer pointForCoord:pt]];
        if (gid == 2)
        {
            SKSpriteNode* node = [layerInfo.layer tileAtCoord:pt];
            node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node.frame.size];
            node.physicsBody.dynamic = NO;
        }

不幸的是,看起来gids出了问题。 _gid_datanilcurrentFirstGID显示为0.我不确定我做错了什么。