我试图制作一个小游戏,你可以用箭头控制一个小立方体。当立方体与另一个块对象相交时,我希望它返回并停止在块对象的边缘。所以基本上我希望我的块在它与块对象相交时停止,相反,它会向它移动一点,然后当我再次移动它时它会跳回来。我该怎么做才能首先检查它是否会相交,以及它是否会进入它?
我的绘图课程延伸JPanel
,我用paintComponent
绘画。
if(keyCode == e.VK_RIGHT) {
if(xRightCollision()){
hero.x -= xVel;
}
else {
hero.x += xVel;
}
}
所以,让我们说立方体位于块对象的边缘,但它还没有相交,所以我按向右移动它,我再向右按,然后向后跳5个像素(xVel = 5)。
public boolean xRightCollision(){
for(int i = 0; i < obstacles.size(); i++) {
if (hero.intersects(obstacles.get(i))) {
return true;
}
}
return false;
}
我实际上在JFrame
上使用paint()尝试了类似的事情,因为你必须在那里调用repaint()
,我可以先检查然后重新绘制。我不太了解paintComponent
的工作原理,因为您无法控制何时应该重新绘制。
答案 0 :(得分:3)
如果立方体与障碍物相交,只需使用临时值检查,并在必要时重置为原始位置:
if(keyCode == e.VK_RIGHT) {
//backup of the cubes position
int tmp = hero.x;
//move the hero to the right
hero.x += xVel;
if(xRightCollision())
//cube intersects with an obstacle -> restore original position
hero.x = tmp;
}