我很擅长使用Phaser和Tiled地图编辑器,而且我正在使用我制作的Tiled地图制作平台游戏。我无法在Tiled或Phaser文档中找到任何信息,也无法在教程或论坛中找到有关如何选择Tiled地图中的图层作为碰撞图层的信息。在一些教程中,我看到人们将Tiled图层属性设置为碰撞:true但我认为他们使用的是不同的Tiled版本,我在Tiled文档中看不到任何相关信息。
我有3层加上一层物体。我将所有碰撞瓷砖放在一个包含地面和平台等物体的层中。我已经阅读了答案,说你需要包含碰撞瓷砖的索引,但我不想包含单独的瓷砖,因为使用了很多瓷砖。我已经包含了我的Tiled地图JSON文件的屏幕截图,我想要制作一个碰撞层的图层被称为“Tile Layer 2”。我不确定是否需要在我的Phaser代码中提及此图层名称以使其成为碰撞图层,或者如果我需要将图层设置为碰撞:在Tiled中为true。我非常感谢有关如何使用Tiled或Phaser制作碰撞图层的任何建议。感谢。
答案 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形状的对象图层,并将其用作碰撞图层。多边形可以是任何形状,允许您使用倾斜和弯曲的瓷砖。您还可以使用单向形状来跳过平台或单向门。也可以为弹性表面设置一个回弹值,或者为一个声波弹簧设置弹簧。
除了高级图块碰撞之外,您还可以获得在平铺地图编辑器中定义的图块动画,碰撞和区域事件处理以及以自定义属性形式访问元数据。