[英]Collision in 2D game
我正在尝试制作一个小游戏,其中有一个可以用箭头控制的小方块。 当多维数据集与另一个块对象相交时,我希望它返回并停在块对象的边缘。 因此,基本上,我希望我的块在与块对象相交时停止,而是将块移入其中,然后在再次移动时跳回。 我如何才能使其首先检查它是否相交以及是否不会移动?
我的绘画类扩展了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
工作原理,因为您无法控制何时应该重新绘制。
只需使用一个临时值来检查立方体是否与障碍物相交,并在必要时重置为原始位置:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.