Java Swing JLayeredPane停止重新绘制所有图层
我正在尝试用Swing制作一个游戏,我需要制作一个有玩家的棋盘,所以我使用了Java Swing JLayeredPane停止重新绘制所有图层,java,swing,jlayeredpane,Java,Swing,Jlayeredpane,我正在尝试用Swing制作一个游戏,我需要制作一个有玩家的棋盘,所以我使用了JLayeredPane。在第0层我画了棋盘,然后在第1层我画了球员。 这很有效,但问题是当我重新绘制第1层时(例如,更改给定玩家的位置),性能非常差。我的假设是它正在重新粉刷背景板,这是问题的根源。 代码如下: JLayeredPane layeredPane = new JLayeredPane(); layeredPane.add(boardView, new Integer(0)); layeredPane.ad
JLayeredPane
。在第0层我画了棋盘,然后在第1层我画了球员。
这很有效,但问题是当我重新绘制第1层时(例如,更改给定玩家的位置),性能非常差。我的假设是它正在重新粉刷背景板,这是问题的根源。
代码如下:
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.add(boardView, new Integer(0));
layeredPane.add(creepsView, new Integer(1));
crewsview
和boardView
覆盖绘制方法,当爬行状态发生变化时,它会调用crewsview.repaint()
方法,但随后JLayeredPane会调用boardView.paint()
。我怎样才能避免呢?(我不想重画那些没有改变的东西)
我猜是因为它在重新粉刷背景板
我怀疑这是个问题,因为画一个载入内存的图像是非常有效的
,它将调用crewsview.repaint()方法,然后JLayeredPane将调用boardview.paint
为了让你看到背景,这意味着包含玩家的面板必须是透明的。这意味着在重新绘制播放器面板时,还必须重新绘制背景面板,以确保没有绘制瑕疵。例如,必须将玩家从其旧位置移除,并在新位置绘制
您可以尝试通过仅绘制面板的受影响区域来提高绘制效率。也就是说,您只需在旧位置和新位置重新绘制播放器,而不是重新绘制整个播放器面板。有关此方法的示例,请阅读上Swing教程的部分。moveSquare(…)
方法显示了这种方法的工作原理
我猜是因为它在重新粉刷背景板
我怀疑这是个问题,因为画一个载入内存的图像是非常有效的
,它将调用crewsview.repaint()方法,然后JLayeredPane将调用boardview.paint
为了让你看到背景,这意味着包含玩家的面板必须是透明的。这意味着在重新绘制播放器面板时,还必须重新绘制背景面板,以确保没有绘制瑕疵。例如,必须将玩家从其旧位置移除,并在新位置绘制
您可以尝试通过仅绘制面板的受影响区域来提高绘制效率。也就是说,您只需在旧位置和新位置重新绘制播放器,而不是重新绘制整个播放器面板。有关此方法的示例,请阅读上Swing教程的部分。moveSquare(…)
方法显示了这种方法的工作原理