2015-06-02 7 views
1

Я пытаюсь получить базовые перекрестки для работы с игрой, которую я разрабатываю, и из-за этого мне нужно определить их hitboxes. Однако при использовании g2d.draw (прямоугольник) прямоугольник не перемещается относительно его обновленных координат.Координаты прямоугольника не обновляются

int x = 100 ; 
int y = 100 ; 
int x2 = x + 100; 
int y2 = y + 100; 

Rectangle hitbox = new Rectangle(x,y,x2,y2) ; 

protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g; 
    //Graphical loop start 
    g2d.draw(hitbox) ; 
    repaint() ; 
    //Graphical loop end 
    } 

gameloop с компонентами KeyListener

public void run() { 

    while(running) { 

     //Player movement 
     if (left) { 
      if (x <= -225) { 
       x = 1440 ; 
      } 
      x = x - 2 ; 
     } 
     if (up) { 
      if(y <= -225) { 
       y = 900 ; 
      } 
      y = y - 2 ; 
     } 
     if (right) { 
      if (x >= 1416) { 
       x = -24 ; 
      } 
      x = x + 2; 
     } 
     if (down) { 
      if (y >= 900) { 
       y = -10 ; 
      } 
      y = y + 2 ; 
     } 
     //Player movement 

     //ball movement 
     if (cubey > y) { 
      cubey-- ; 
     } 
     if(cubey < y) { 
      cubey++ ; 
     } 
     if (cubex > x) { 
      cubex-- ; 
     } 
     if (cubex < x) { 
      cubex++ ; 
     } 
+0

Возможно, вам нужно перекрасить каждый раз, когда меняются координаты (я не уверен в этом) – vefthym

+0

Попробуйте 'Прямоугольник # содержит()'. – trashgod

+0

См. Также [Обнаружение столкновений с сложными формами] (http://stackoverflow.com/a/14575043/418556). –

ответ

1

на основе предоставленной кода не существует никакой связи между Hitbox прямоугольника и координаты, что вы меняете. Обновите прямоугольник с новыми x, y, а затем перерисуйте.

Что-то вроде этого:

public void run() { 
    while(running) { 
     //... 
     hitbox.setBounds(x,y,100,100); 
    } 
} 

даже это не эффективно, как ваш поток программа должна работать.

Смежные вопросы