我正在使用JApplet制作2人游戏。我在左侧绘制第一个玩家的屏幕,在右侧绘制第二个玩家的屏幕,然后在底部中心绘制整个地图的小地图。我将所有内容绘制到一个名为bimg的缓冲图像上,然后使用bimg.getSubimage根据每个玩家的位置获取双方。我将标准的drawImage方法与其他参数一起使用,以绘制地图整个图像的缩放版本。我遇到的问题是,我绘制的小地图每隔几帧闪烁一次,似乎有时它先绘制左侧,而有时又先绘制右侧,而不是先绘制两侧,然后再绘制顶部的地图。我想知道是否有人可以提出一种方法来解决这个问题。我希望我提供的上下文足够清楚,这里有一些代码可供参考。谢谢
drawP1Side = bimg.getSubimage(p1.viewX, p1.viewY, 400, 700);
drawP2Side = bimg.getSubimage(p2.viewX, p2.viewY, 400, 700);
g.drawImage(drawP1Side, 0, 0, null);
g.drawImage(drawP2Side, 410, 0, null);
g.drawImage(bimg, 320, 500, 200, 200, null);
最佳答案
根据说明...
欢迎来到美好世界,为什么您不应该覆盖顶级容器的paint
原因。
基本上,顶级容器(例如JApplet
)不会被双重缓冲,这会导致它们在更新时闪烁。
相反,您应该为自己创建一个自定义组件,从诸如JPanel
之类的内容扩展并覆盖其paintComponent
方法,然后在此处执行自定义绘制...
查看Performing Custom Painting了解更多详细信息
所有Swing组件都实现ImageObsever
(来自JComponent
),因此,假设您正在某个this
内部调用它,则应将ImageObserver
作为drawImage
参数传递给JComponent
。