0

我有两个在屏幕上移动的方块,两个方块都来自同一个类(它是被绘制两次的同一个方块)。我已经想出了如何在它们之间进行碰撞检测,所以这不是问题。问题是方块可以相互穿过,所以我想我可以做到,这样当方块相互碰撞时,它们会传送到它们碰撞前的最新 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);
        } 
    }   
}
4

1 回答 1

0

您可以将所有先前的 x,y 位置存储在列表中,并在发生碰撞时回溯一个步骤,或者仅将最后一个坐标存储在临时变量中。但正如邓肯所说,我觉得你的新路径应该沿着与冲击正交的轴反映

于 2013-04-26T11:35:24.980 回答