2013-04-26 1 views
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); 
        } 
       } 
      } 

Как бы сделать так, что он получает й и у позиции, прежде чем они colided, а не один, они были в то время как они были встречными?

Это метод 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); 
        } 
       } 
      } 
+0

Пожалуйста, покажите свой метод 'checkRectCollisionAndMovement();' или сообщите нам, что он делает и как он это делает. –

+2

Скопируйте их в другую переменную и назовите их как previousX и newX – AurA

+0

yep, if! R1.intersects (r2), сохраните текущие x и y в списке или Map , и если они пересекаются, не устанавливайте новые вычисленные координаты, но читайте те, которые были сохранены в предыдущем запуске. –

ответ

0

Вы можете хранить все предыдущие х, у позиции в списке и TRACEBACK один шаг, когда происходит столкновение или хранить только последние координаты во временных переменных. Но, как сказал Дункан, я чувствую, что ваш новый путь должен отражать вдоль оси, ортогональной удару.