Java JApplet游戏的迷你地图闪烁

时间:2013-12-11 04:33:00

标签: java bufferedimage japplet

我正在使用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);

1 个答案:

答案 0 :(得分:1)

根据说明......

欢迎来到为什么不应该覆盖paint顶级容器的精彩世界。

基本上,顶级容器(如JApplet)不是双缓冲的,这会导致它们在更新时闪烁。

相反,您应该创建一个自定义组件,从JPanel扩展并覆盖它的paintComponent方法并在那里执行自定义绘制......

请查看Performing Custom Painting了解详情

所有Swing组件都实现ImageObsever(来自JComponent),因此您应该将this作为ImageObserver参数传递给drawImage,假设您是从某些JComponent ...

中调用它