我正在使用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);
答案 0 :(得分:1)
根据说明......
欢迎来到为什么不应该覆盖paint
顶级容器的精彩世界。
基本上,顶级容器(如JApplet
)不是双缓冲的,这会导致它们在更新时闪烁。
相反,您应该创建一个自定义组件,从JPanel
扩展并覆盖它的paintComponent
方法并在那里执行自定义绘制......
请查看Performing Custom Painting了解详情
所有Swing组件都实现ImageObsever
(来自JComponent
),因此您应该将this
作为ImageObserver
参数传递给drawImage
,假设您是从某些JComponent
...