Javascript 重叠梯子时如何设置玩家移动能力

Javascript 重叠梯子时如何设置玩家移动能力,javascript,phaser-framework,Javascript,Phaser Framework,我正在写一个简单的平台游戏。我使用平铺贴图为重叠和碰撞创建标高层。我遇到了一个问题:我试图让玩家在与梯子重叠时能够爬上梯子 我在gameSettings对象playerMoveY中有一个变量:false(因此默认情况下,玩家只能向左或向右行走) 当玩家重叠梯子瓷砖时,他可以攀爬,但之后他总是能够攀爬,因为变量playerMoveY仍然=真。我不知道怎么把它换回来。也许使用国旗不是个好主意。我需要建议。多谢各位 let gameSettings = { playerSpeed: 60,

我正在写一个简单的平台游戏。我使用平铺贴图为重叠和碰撞创建标高层。我遇到了一个问题:我试图让玩家在与梯子重叠时能够爬上梯子

我在gameSettings对象playerMoveY中有一个变量:false(因此默认情况下,玩家只能向左或向右行走)

当玩家重叠梯子瓷砖时,他可以攀爬,但之后他总是能够攀爬,因为变量playerMoveY仍然=真。我不知道怎么把它换回来。也许使用国旗不是个好主意。我需要建议。多谢各位

let gameSettings = {
    playerSpeed: 60,
    playerMoveY: false,
}

//here's the code from gameScene class
this.laddersLayer.setTileIndexCallback(29, this.allowClimb, this);
this.physics.add.overlap(this.player, this.laddersLayer);

    movePlayerManager() {
        if (this.cursorKeys.left.isDown) {
            this.player.anims.play('playerWalkLeft', true);
            this.player.setVelocityX(-gameSettings.playerSpeed);
        } else if (this.cursorKeys.right.isDown) {
            this.player.anims.play('playerWalkRight', true);
            this.player.setVelocityX(gameSettings.playerSpeed);
        } else {
            this.player.setVelocityX(0);
            this.player.anims.play('playerStand');
        }

        if (gameSettings.playerMoveY) {

        if (this.cursorKeys.up.isDown) {
                this.player.anims.play('playerClimb', true);
                this.player.setVelocityY(-gameSettings.playerSpeed);
            } else if (this.cursorKeys.down.isDown) {
                this.player.anims.play('playerClimb', true);
                this.player.setVelocityY(gameSettings.playerSpeed);
            } else {
                this.player.setVelocityY(0);
            }
        }
    }

//and here's the callback function when overlap
    allowClimb() {
        gameSettings.playerMoveY = true;
    }

您当前仅检查玩家是否与阶梯重叠,然后设置:
gameSettings.playerMoveY=true。您需要检查其他类型的瓷砖。我从未使用过tiled,因此我不知道它是如何工作的,但我建议尝试在更新函数中实现类似的功能:

//this is just sudo code
if(player.byLadder() == true){
    player.canClimb = true;
}else{
    player.canClimb = false;
}

函数必须在玩家可以攀爬的任何时候(攀爬之前、攀爬期间、攀爬结束时)返回true。再次,我为没有更具体的代码表示歉意,因为我从未接触过平铺。

您需要一种不同的方法来检测阶梯平铺,因为使用当前的方法,您还必须为所有其他平铺设置平铺索引,该平铺索引将重置
游戏设置。playerMoveY
false
,用于除阶梯平铺以外的所有平铺。