gpt4 book ai didi

java - 玩家遍历它不应该的对象 libgdx java

转载 作者:行者123 更新时间:2023-11-30 10:55:46 26 4
gpt4 key购买 nike

由于某种原因,我的播放器能够穿过它不应该穿过的物体。我正在使用一个二维 boolean 数组,如果玩家左边的位置在网格中是正确的,那么他不应该能够移动,右边也是如此。我确实知道碰撞处理程序正在工作,因为它所做的只是检查左侧或右侧是否有东西,如果有则将 player.setCanMoveLeft 或 right 写入 false 并且代码正在运行在以前的版本中。当玩家的左边或右边有东西时,我会打印出一些东西,这样我就知道碰撞处理程序正在做它的工作。我只是不明白这里发生了什么是我的播放器扩展的实体更新方法,

if(!wantsToMoveLeft && !wantsToMoveRight)
velocity.x = 0;

if(velocity.x > 1){
velocity.x = 1;
}if(velocity.x<-1)
velocity.x = -1;

position.x += velocity.x;
spritePosition.x += velocity.x;
position.y += velocity.y;
spritePosition.y += velocity.y;

这是我的播放器更新方法,

if(wantsToMoveRight && canMoveRight)
velocity.x = 1;
if(wantsToMoveLeft && canMoveLeft)
velocity.x = -1;

if(wantsToJump && canJump){
canFall = true;
velocity.y += 1f;

if(lastLeft){
jumpLeft = true;
jumpRight = false;
}else{
jumpRight = true;
jumpLeft = false;
}
}else if(canJump == false){
jumpLeft = false;
jumpRight = false;
}

super.update();

这也是我的输入监听器类

@Override
public boolean keyDown(int keycode) {
if(keycode == Keys.A){
player.setLastLeft(true);
player.setLastRight(false);
player.setWantsToMoveLeft(true);
player.setWantsToMoveRight(false);
}

if(keycode == Keys.D){
player.setLastRight(true);
player.setLastLeft(false);
player.setWantsToMoveRight(true);
player.setWantsToMoveLeft(false);
}

if(keycode == Keys.W){
player.setWantsToJump(true);
}
return false;
}

@Override
public boolean keyUp(int keycode) {
if(keycode == Keys.A){
player.setLastLeft(true);
player.setLastRight(false);
player.setWantsToMoveLeft(false);
}
if(keycode == Keys.D){
player.setLastRight(true);
player.setLastLeft(false);
player.setWantsToMoveRight(false);
}

if(keycode == Keys.W){
player.setWantsToJump(false);
}
return false;
}

如果有人能帮我解决这个问题,我将不胜感激,因为我完全不知所措。如果您需要任何其他信息,请在评论中提出。谢谢*你!!

更新 - 如果我走到物体附近(在击中它之前)并停下来(松开键)然后尝试压制它它不会让我移动(即如果我这样做它会起作用)

注意 - 我相信这段代码在我切换到使用 InputListener 之前有效这可能是错误的,虽然我不太记得了但我确信它没有奏效,因为我从在播放器更新中使用 Gdx.input 切换到通过 InputListener

进行通信

最佳答案

我错过的简单解决方案与当被告知他不能移动时不执行止损有关。我无法解释为什么它以前能正常工作,现在我需要这行代码,但在这里,我将这些代码行放在我的播放器更新和方法中,现在它运行得很好。

if(!canMoveLeft) {
if(!wantsToMoveRight) {
velocity.x = 0;
} else {
velocity.x = 1;
}
}

if(!canMoveRight) {
if(!wantsToMoveLeft) {
velocity.x = 0;
} else {
velocity.x = -1;
}
}

对于可能对此感到困惑的任何人,我深表歉意,感谢所有试图提供帮助的人!

关于java - 玩家遍历它不应该的对象 libgdx java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33228241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com