开发者问题收集

Phaser:使用多个场景时 setCollisionByProperty 的问题

2022-06-22
148

我是Phaser的首次亮相。我尝试制作一个迷你RPG游戏。 我制作了地图并将其导出为.json对象,并使用setCollisionByProperty使我的精灵和瓷砖之间的碰撞。 当我在独奏场景中测试它时,它可以正常工作。但是,当我想使用多个场景时,当我想返回场景时会出现错误。

858615124

多次测试后,我在使用setCollisionByProperty时找到了问题,但是我i不了解如何解决

这是代码:

834885247

gamesscene中(在maisonscene中是相同的):

<代码> 176936896

staticlayer包含我所有的层

感谢您的帮助 (对不起,我的英语不好,我是法语)

2个回答

谢谢,我发现了我的错误。 就像你说的:错误是我的变量 staticLayer。它需要与场景一起重新启动,因为当场景重新启动时,它会将第一个场景的图层保留在内存中。 所以我将变量放在 create() 中,以便在场景重新启动时使数组为空:

create(){
staticLayer = []

不再有错误!

再次感谢

Gwyn
2022-06-23

我希望它能帮助您找到/调试它 (我的信息太长,无法发表评论)

好吧,我在一个小的演示中测试了这个结构,它有效。所以我必须假设, 错误是在那里抛出的,但可能是在其他地方引起的。可能是场景的切换,但没有看到代码,我无法说。这就是为什么我建议不要使用全局变量,而是使用属性来收集图层。

这里有一些你可以做的改动,可能会解决问题:

  1. 删除此行:

    let staticLayer = []
    
  2. 设置新属性:

    export default class GameScene extends Phaser.Scene{
    constructor(){
    super({key : "GameScene"})
    this.staticLayer = [];
    }
    ...
    
  3. 将所有 staticLayer 替换为 this.staticLayer

    ...
    this.staticLayer.push(carteDuNiveau.createLayer("sol",tileset));
    ...
    staticLayer.forEach((element) => {
    ...
    })
    ...
    

如果这没有帮助,您必须检查切换场景的代码。

winner_joiner
2022-06-22