Я, вероятно, делаю это неправильно, поэтому, пожалуйста, будьте милы
Я занимаюсь разработкой Java-игры и нахожусь на стадии тестирования движения / анимации персонажей.
«Человек» может двигаться вверх и вниз влево и вправо по сетке.
Класс, в котором нарисована сетка, является классом gamePanel.
Кнопки находятся в классе gameControlPanel.
У меня есть кнопка, которая порождает человека в сетке.
Затем у меня есть кнопка для перемещения человека вверх и вниз влево и вправо.
При нажатии кнопки перемещения вверх вызывается метод перемещения вверх из класса person.
(На данный момент я тестирую только одного «человека» за раз.)
В этом методе следующий код ...
int move = 10;
while(move!=0)
{
setTopLeftPoint(new Point((int)getTopLeftPoint().getX(),
(int)getTopLeftPoint().getY() - 3));
try
{
Thread.sleep(300);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
move-=1;
}
Проблема в том, что я не могу вызвать метод repaint для класса gamePanel из класса Person.
Чтобы обойти это, я создал таймер в классе gamePanel, который перерисовывает каждые 20 мс.
Когда я нажимаю кнопку «вверх» после появления человека, кнопка остается нажатой до тех пор, пока не будут завершены циклы цикла «пока», а затем круговое представление человека отображается в квадрате сетки выше.
Я постараюсь ответить на любые вопросы по этому поводу.