Я пишу Java-игру с использованием Swing и Firebase. Я сохраняю всех своих игроков в списке, и когда любой из них перемещает обратный вызов onChildChanged(...)
(см. Ниже), запускается. Поскольку это асинхронный режим, я, очевидно, не могу установить переменные, выходящие за рамки функции. Это было все нормально, пока мне не нужно было нарисовать этот плеер на экране.
Поскольку я расширяю JPanel
и перезаписываю его paintComponent(Graphics g)
, я должен сделать все свои рисунки в этом методе (или, по крайней мере, так мне сказали). Проблема в том, что мне нужно вытащить этого игрока из колбэка, а я не знаю, как это сделать.
Я попытался «экспортировать» объект Graphics g
в глобальную переменную, а затем использовать эту переменную в асинхронной функции, но это не дало никаких результатов. Может быть, потому что это на самом деле не рисование на холсте JPanel?
Итак, у меня есть что-то вроде этого:
class Screen extends JPanel {
@Override
public void paintComponent(Graphics g) {
// All my painting stuff goes here
}
ref.addChildEventListener(new ChildEventListener() {
// This is the callback
@Override
public void onChildChanged(DataSnapshot snapshot, String previousChildName) {
// Draw the player
}
}
});
}
РЕДАКТИРОВАТЬ: забыл упомянуть, что я также звоню repaint()
на каждом игровом тике (60 раз в секунду). Я не знаю, если это что-то меняет, но на всякий случай:)
Итак, я хочу, чтобы я мог рисовать игрока внутри колбэка или рисовать его методом paintComponent()
, и мне интересно, как это можно сделать.
Спасибо!