我正在编写一个简单的平台游戏。我使用平铺 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/