我遇到了墙碰撞问题。基本上我希望我的球员每当碰到一个街区时就停下来。 这是我做了这么远:2D地图上的块碰撞问题平铺java
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 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;
}
}
这里就是碰撞测试:
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;
}
我成立我的代码喜欢这个,以避免当我与我正在测试的块碰撞时被卡住。它的工作原理,但我遇到了很多错误。一个例子是有时候我被卡住了,或者玩家可以通过用水平键按压垂直方向的方块。我有问题找出适当的算法。顺便说一句,方向是基于观众的方向而不是玩家的方向。
有人可以跟我分享一下血统吗?谢谢。
尽量在你的问题更具体,更侧重于具体的问题。 – ahanin 2012-04-06 06:53:00
嗨,我的问题是,我设置的代码没有做我想做的事情。例如,当玩家正确地向右碰撞并碰撞到一个障碍物时,碰撞会执行,但是当我按下W时,玩家就会卡住,我必须按S才能上升,反之亦然。我希望玩家检测到指定瓷砖的每一面都是封闭的瓷砖,因此玩家无法在各个方向上穿过它。我正在寻找一个可以告诉我它是如何完成的下降代码。 – krazaz 2012-04-06 08:03:22