微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWT快速图形和线程安全

如何解决AWT快速图形和线程安全

| 我正在将一个非常老的AWT游戏移植到一个真正的新型设备上。 游戏存在很多问题,包括非常不严格的线程安全方法:游戏引擎试图使用从UI线程获得的图形上下文直接在其引擎线程中绘制屏幕。这在设备上不起作用。 我已经设法使引擎线程工作到屏幕上的缓冲区,然后让UI线程定期在显示组件上调用repaint(),而显示组件将缓冲区发送到屏幕上,从而设法使其工作。性能糟透了-考虑到所有上下文切换和双重缓冲,这不足为奇。 我实际上并不是一个特别有名的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();
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。