Phaser - 如何选择Tiled地图图层并将其设置为碰撞图层

时间:2015-11-09 09:06:59

标签: javascript phaser-framework tiled

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

我有3层加上一层物体。我将所有碰撞瓷砖放在一个包含地面和平台等物体的层中。我已经阅读了答案,说你需要包含碰撞瓷砖的索引,但我不想包含单独的瓷砖,因为使用了很多瓷砖。我已经包含了我的Tiled地图JSON文件的屏幕截图,我想要制作一个碰撞层的图层被称为“Tile Layer 2”。我不确定是否需要在我的Phaser代码中提及此图层名称以使其成为碰撞图层,或者如果我需要将图层设置为碰撞:在Tiled中为true。我非常感谢有关如何使用Tiled或Phaser制作碰撞图层的任何建议。感谢。

Tiled map JSON file

2 个答案:

答案 0 :(得分:0)

我评论过,但是我认为id会给出一个完整答案。我使用P2物理,如果你使用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构建的东西一样)采用不同的方式。

答案 1 :(得分:0)

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

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

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