首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWT快速图形和线程安全

AWT快速图形和线程安全
EN

Stack Overflow用户
提问于 2011-05-28 06:18:25
回答 1查看 1.4K关注 0票数 7

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

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

我已经设法让引擎线程绘制到屏幕外的缓冲区上,然后让UI线程定期在显示组件上调用repaint(),并让显示组件将缓冲区放到屏幕上,但性能很差-考虑到所有的上下文切换和双缓冲,这并不奇怪。

我实际上不是一个特别知名的AWT程序员;它足够令人讨厌,以至于我到目前为止一直避免使用它。但是这个问题-有一个引擎线程想要在屏幕上绘制-必须是一个常见的问题。有没有人知道什么好的策略(最好是示例代码!)如何以一种安全的方式做到这一点,从而尽可能地提高系统的性能?

(我特别想要的是一种安全的快捷方式,它允许引擎线程在感觉准备好时直接呈现到屏幕图形上下文上,从而避免必须告诉UI线程请求重绘。这将让我去掉一整层的双缓冲。但我不知道这样的事情是否可能发生…)

这一切都在PBP1.1.2上-是的,它既不是完整的Java也不是诚实的MidP……

EN

回答 1

Stack Overflow用户

发布于 2011-05-28 06:24:50

使用game canvas可能会有所帮助。它允许在游戏循环中完成绘画,所以你不需要双缓冲。另一种更粗糙的方法是使用paintImmediately()。它将迫使gui重新绘制。

代码语言:javascript
复制
//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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6158242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档