【问题标题】:Phaser - how to select a Tiled map layer and set it as collision layerPhaser - 如何选择平铺地图图层并将其设置为碰撞图层
【发布时间】:2016-02-09 21:27:39
【问题描述】:

我对使用 Phaser 和 Tiled 地图编辑器非常陌生,我目前正在使用自己制作的 Tiled 地图制作平台游戏。我无法在 Tiled 或 Phaser 文档、教程或论坛中找到有关如何在 Tiled 地图中选择图层作为碰撞图层的任何信息。在一些教程中,我看到人们将 Tiled 图层属性设置为 collision:true,但我认为他们使用的是不同的 Tiled 版本,我在 Tiled 文档中看不到任何相关信息。

我有 3 层加上一层用于对象。我已将所有碰撞图块放在一层,其中包括地面和平台之类的东西。我读过答案说您需要包含碰撞图块的索引,但我不想包含单个图块,因为使用了很多图块。我已经包含了我的平铺地图 JSON 文件的屏幕截图,我想要制作碰撞层的图层称为“平铺层 2”。我不确定是否需要在我的 Phaser 代码中提及此图层名称以使其成为碰撞图层,或者是否需要将图层设置为碰撞:在 Tiled 中为 true。我真的很感谢任何关于如何使用 Tiled 或 Phaser 使其成为碰撞层的建议。谢谢。

Tiled map JSON file

【问题讨论】:

  • 移相器示例已分配覆盖瓷砖地图。这可能对你有帮助。 phaser.io/examples/v2/tilemaps/map-collide 那是使用街机物理。如果使用 P2 我会这样做 game.physics.p2.convertCollisionObjects(levelMap, "Layer", true);

标签: javascript phaser-framework tiled


【解决方案1】:

我发表了评论,但认为 id 给出了更多完整的答案。我使用P2physics,如果您使用 Arcade,这可能不适用,必须 Phaser 网站上的大多数示例都假定使用 Arcade。

因此,一旦您在 Tiled 中创建了 tilemap,您就可以在 preload 方法中加载 JSON 和 tileset 图像:

game.load.tilemap('levelOneData', 'assets/levels/levelOne.json', null, Phaser.Tilemap.TILED_JSON);
game.load.image('levelOneImage', 'assets/pics/levelOne.png');

然后在您的 create 方法中加载您的图块集图像并设置您与图层的碰撞。

levelMap = game.add.tilemap('levelOneData');
slowLayerBodies = game.physics.p2.convertCollisionObjects(levelMap, "collide", true);

//add background image and set world size
background = game.add.tileSprite(0, 0, 4040, 2880, 'levelOneImage');

我不是 Phaser 方面的专家,我自己仍在学习它,但这很有效。很可能(与大多数 JavaScript 构建的东西一样)有不同的方法。

【讨论】:

    【解决方案2】:

    另一种可能是使用这个 Phaser 插件:https://www.npmjs.com/package/phaser-tilemap-plus

    您可以设置具有多边形和矩形形状的对象层,并将其用作碰撞层。多边形可以是任何形状,允许您使用倾斜和弯曲的瓷砖。您还可以使用单向形状来跳过平台或单向门。也可以为有弹性的表面或弹簧设置回弹值。

    除了高级瓦片碰撞之外,您还可以获得在瓦片地图编辑器中定义的瓦片动画、碰撞和区域事件处理以及以自定义属性的形式访问元数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多