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

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

当玩家与梯子重叠时,他可以攀爬,但在那之后他总是可以攀爬,因为变量 playerMoveY 仍然 = true。不知道怎么换回来也许使用标志不是一个好主意。我需要建议。谢谢你。

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; 。您需要检查其他类型的瓷砖。我从来没有使用过平铺,所以我不知道它是如何工作的,但我建议尝试在更新函数中实现这样的东西:

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

player.byLadder() 函数必须在玩家可以攀爬的所有时间(攀爬前、攀爬时、攀爬结束时)以某种方式返回 true。再次,我为没有更具体的代码而道歉,因为我从未接触过 Tiled。

关于javascript - 重叠梯子时如何设置玩家移动能力,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56894340/

10-15 20:58