我正在使用 Swing 和 Firebase 编写基于 Java 的游戏。我将所有玩家存储在一个列表中,当他们中的任何一个移动时,onChildChanged(...)回调(见下文)被触发。由于这是异步的,我显然不能设置任何超出函数范围的变量。这一切都很好,直到我需要将这个播放器实际绘制到屏幕上。
因为我扩展了 aJPanel并覆盖了它,所以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()方法中绘制播放器,我想知道如何做到这一点。
谢谢!
湖上湖
相关分类