gpt4 book ai didi

java - AWT 快速图形和线程安全

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:39 25 4
gpt4 key购买 nike

我正在将一个非常古老的 AWT 游戏移植到一个非常糟糕的新设备上。

这款游戏有一大堆问题,包括对线程安全的一种非常松懈的方法:游戏引擎试图使用从 UI 线程获得的图形上下文在其引擎线程中直接绘制到屏幕上。这在设备上不起作用。

我设法让它开始工作,方法是让引擎线程绘制到屏幕外缓冲区,然后让 UI 线程定期调用显示组件上的 repaint() ,然后显示组件将缓冲区 blit 到屏幕上,但性能很糟糕——考虑到所有上下文切换和双缓冲,这不足为奇。

我实际上并不是一个知识渊博的 AWT 程序员;到目前为止我一直避免它,这已经够可恨了。但是这个问题——有一个引擎线程想要在屏幕上绘制——一定是一个常见的问题。有谁知道任何体面的策略(最好是示例代码!)如何以安全的方式执行此操作以尽可能多地从系统中挤出性能?

(我特别喜欢的是一个安全的快捷方式,允许引擎线程在感觉准备好时直接渲染到屏幕图形上下文,从而避免必须告诉 UI 线程请求重绘。那个会让我取出一整层双缓冲。但我不知道这样的事情是否可能......)

这一切都在 PBP 1.1.2 上——是的,它既不是完整的 Java 也不是诚实的 MidP...

最佳答案

使用 game canvas可能有帮助。它允许在游戏循环中完成绘画,因此您不需要双缓冲。另一种更粗略的方法是使用 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();
}

关于java - AWT 快速图形和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com