壁の衝突に問題があります。基本的には、ブロックに衝突するたびにプレイヤーが停止するようにします。ここ は、私がこれまでにやったことだ:2Dマップ上のブロック衝突の問題
のKeyListenerを設定:
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_A){
pressL = true;
}
if(e.getKeyCode() == KeyEvent.VK_D){
pressR = true;
}
if(e.getKeyCode() == KeyEvent.VK_W){
pressU = true;
}
if(e.getKeyCode() == KeyEvent.VK_S){
pressD = true;
}
}
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_A){
pressL = false;
}
if(e.getKeyCode() == KeyEvent.VK_D){
pressR = false;
}
if(e.getKeyCode() == KeyEvent.VK_W){
pressU = false;
}
if(e.getKeyCode() == KeyEvent.VK_S){
pressD = false;
}
}
public void keyTyped(KeyEvent e){
}
});
をプレイヤーの動き:
public boolean collision(String loc){
Rectangle pR = player.getBound();
Rectangle pM = map.getBound(0, 0);
if(loc.equals("east")){
if(pR.equals(pM)){
if(west)
return false;
if(!west)
return true;
} west = false; south = false;north = false;
}
if(loc.equals("west"))
if(pR.intersects(pM)){
if(east)
return false;
if(!east)
return true;
} east = false; south = false;north = false;
}
if(loc.equals("south")){
if(pR.intersects(pM)){
if(north)
return false;
if(!north)
return true;
} north = false; west = false;east = false;
}
if(loc.equals("north")){
if(pR.intersects(pM)){
if(south)
return false;
if(!south)
return true;
} south = false; west = false;east = false;
}
return false;
}
私が設定:衝突試験がどこにある
public void playerMovement(){
player.horizontalMovement(0);
player.verticalMovement(0)
map.horizontalMovement(0);
map.verticalMovement(0);
if(pressR && !pressL && !pressU && !pressD){
if(!east){
toggleRight();
}
if(collision("east"))
east = true;
}
if(pressL && !pressR && !pressD && !pressU){
if(!west)
toggleLeft();
if(collision("west"))
west = true;
}
if(pressD && !pressU && !pressR && !pressL){
if(!south)
toggleDown();
if(collision("south"))
south = true;
}
if(pressU && !pressD && !pressL && !pressR){
if(!north)
toggleUp();
if(collision("north"))
north = true;
}
}
がここにあります私のコードでは、私がテストしているブロックと衝突するたびにスタックされるのを避けるためにこれが好きです。それは動作しますが、私が遭遇しているバグがたくさんあります。 1つの例は、時々私が立ち往生する、またはプレーヤーが水平キーで垂直を押してブロックを通過することができます。私はこのための適切なアルゴリズムを見つけ出すことに問題があります。ところで、方向は、プレーヤーの方向ではなく、視聴者の方向に基づいています。
誰かが私の下降方法を共有することはできますか?ありがとう。
を使用することができます。 – ahanin
こんにちは、私の問題は、私が設定したコードが、私がしたいことをしていないことです。たとえば、プレイヤーが右に向かい、衝突がブロックにぶつかっているときのように、Wを押したときにプレイヤーが動かなくなり、Sを押してS字を押し上げる必要があります。私はプレーヤーが指定されたタイルのすべての側面をブロックされたタイルになるようにして、プレーヤーがあらゆる方向にそれを歩くことができないようにします。私はどのようにそれが完了したかを示すことができる降下コードを探しています。 – krazaz