我有两个在屏幕上移动的方块,两个方块都来自同一个类(它是被绘制两次的同一个方块)。我已经想出了如何在它们之间进行碰撞检测,所以这不是问题。问题是方块可以相互穿过,所以我想我可以做到,这样当方块相互碰撞时,它们会传送到它们碰撞前的最新 x 和 y 位置。我已经尝试了一些东西,但它们都不起作用。在我的线程中,我现在有这个代码。
for(int i = 0; i < rectangles.size(); i++){
Rectangle rect = (Rectangle) rectangles.get(i);
x = rect.getXPos();
y = rect.getYPos();
checkRectCollisionAndMovement();
for(int j = i + 1; j < rectangles.size(); j++){
Rectangle rect2 = (Rectangle) rectangles.get(j);
Rectangle r1 = rect.getBounds();
Rectangle r2 = rect2.getBounds();
if(r1.intersects(r2)){
rect.setXPos(x);
rect.setYPos(y);
}
}
}
我将如何使它在碰撞之前获得 x 和 y 位置,而不是在碰撞时获得的位置?
这是 checkCollisionAndMovement 方法
public void checkRectCollisionAndMovement(){
for(int i = 0; i < rectangles.size(); i++){
Rectangle rect = (Rectangle) rectangles.get(i);
if(rect.getYPos() > 500){
rect.setYPos(rect.getYPos() - .1);
}
if(rect.getYPos() < 500){
rect.setYPos(rect.getYPos() + .1);
}
if(rect.getXPos() > 500){
rect.setXPos(rect.getXPos() - .1);
}
if(rect.getXPos() < 500){
rect.setXPos(rect.getXPos() + .1);
}
if(rect.isVisibe()){
rect.move();
}else{
rect.remove(i);
}
}
}