Dav*_*ven 7 java graphics 2d awt
我正在将一个非常古老的AWT游戏移植到一个非常简洁的新设备上.
游戏中有一大堆错误,包括一个非常松懈的线程安全方法:游戏引擎试图使用从UI线程获得的图形上下文直接在其引擎线程中绘制到屏幕上.这在设备上不起作用.
通过让引擎线程绘制到屏幕外缓冲区然后让UI线程周期性地调用显示组件上的repaint()和显示组件将缓冲区blit到屏幕上,我已经设法破解它的工作,但是性能糟透了 - 鉴于所有上下文切换和双缓冲,这并不奇怪.
我实际上并不是一个特别知识渊博的AWT程序员; 到目前为止,我已经完全避免它了,这是非常可恶的.但是这个问题---有一个引擎线程想要画在屏幕上---必须是一个普通的问题.有没有人知道如何以安全的方式做到这一点的任何体面的策略(最好是示例代码!),尽可能多地挤出系统性能?
(我特别喜欢的是一个安全的快捷方式,允许引擎线程在感觉准备好时直接渲染到屏幕图形上下文中,因此避免告诉UI线程请求重绘.这将让我拿出一整层双缓冲.但我不知道这样的事情是否可能......)
这都是关于PBP 1.1.2 ---是的,既不是完整的Java也不是诚实的MidP ......
使用游戏画布可能会有所帮助。它允许在游戏循环中完成绘画,因此您不需要双缓冲。另一种更粗暴的方法是使用paintImmediately()。它将强制 GUI 重新绘制。
//Gui
public void update(/*may want to pass the shapes to paint*/)
{
paintImmediately(this.getGrphics()); // assuming 'this' is a jpanel
}
//Game loop
public void gameLoop()
{
// collision detection etc
gui.update();
}
Run Code Online (Sandbox Code Playgroud)