2013-12-11 147 views
0

我正在使用JApplet制作2人游戏。我在左侧绘制第一个玩家的屏幕,在右侧绘制第二个玩家屏幕,然后在底部中心绘制整个地图的小地图。我将所有内容都绘制到名为bimg的缓冲图像上,然后使用bimg.getSubimage根据每个玩家的位置获取双方。我使用带额外参数的标准drawImage方法绘制地图整个图像的缩放版本。我遇到的问题是我画的小地图每隔几帧就会闪烁一次,看起来有时它会先画左边,其他时候先画右边,而不是绘制双方,然后绘制它们的顶部地图。我想知道是否有一种方法可以帮助解决这个问题。我希望我提供的上下文足够清晰,以下是一些可供参考的代码。由于Java小游戏JApplet游戏闪烁

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

你是怎么画的,通过哪一类的方法?为什么你将'null'传递给'drawImage'的ImageObserver参数? – MadProgrammer

回答

1

基于描述...

欢迎的原因精彩的世界,为什么你不应该覆盖顶层容器paint

基本上,像JApplet这样的顶级容器没有双缓冲,这会导致它们在更新时闪烁。

相反,你应该自己创建一个自定义组件,从东西像扩展和JPanel重写它的paintComponent方法和执行你的风俗画有...

Performing Custom Painting看看更多细节

所有Swing组件实现ImageObsever(从JComponent),所以你应该通过this作为ImageObserver参数drawImage,假设你从一些JComponent内调用它...

+0

谢谢,我改变它扩展Jpanel,现在它不再闪烁。它仍会像JAR一样运行,并作为JPanel在网站上嵌入相同的applet吗? – parameter

+0

什么猜测:D - 很高兴帮助 – MadProgrammer

+0

它仍然会像JAR一样运行,并像JPanel一样嵌入到网站上作为applet吗? – parameter