java - 被动渲染方式

标签 java graphics bufferstrategy

我正在构建一个简单的游戏渲染方法。我有一个静态图像,例如 map 背景,根本没有真正改变。我只使用整个屏幕的 30% 来更改图形。而且我觉得如果没有改变,就没有必要一遍又一遍地渲染所有这些东西。

在互联网上我发现了一些关于被动渲染的东西 - 你绘制你需要的东西并等待......直到有更新......之后你更新它并再次等待。 看起来对于这种情况来说是一个很好的方法。但现在 ... 我有一个这样的渲染方法:

public class X extends Canvas{
//some method 
  this.createBufferStrategy(3);
//....
public void render(){
   BufferStrategy buffer = this.getBufferStrategy();
   Graphics g = buffer.getDrawGraphics();
   //Draws black background...
   g.setColor(Color.BLACK);
   g.fillRect(.... 
   for(... //cycles every object and calls their render methods... 
}

这无法维持绘制和等待方法...因为背景每 1/30 秒重绘一次,所以如果您没有任何东西可绘制,您将得到黑色 Canvas ,上面没有任何内容...所以您有每次更新都要重新绘制所有内容...如果我不绘制背景,缓冲区就会开始像 hell 一样闪烁...所以我必须有一些东西来掩盖这些东西。

我在互联网上搜索,没有找到任何关于这种渲染类型的其他解决方案。..有很多用于主动渲染的东西,但没有任何关于绘制和等待方法的东西..

我认为使用 BufferStrategy 不可能做到这一点。还有其他东西可以为此服务吗? Graphics g 还有其他来源吗?在互联网上有一些关于从 Canvas 调用它 directyl 的内容,但我没有让它运行。还是我从错误的角度思考这个问题?

最佳答案

您将被动渲染与部分更新混淆了。在“被动渲染”中,您可以重绘所有内容,但不能以 30fps 的速度进行。只有当有东西移动时你才会这样做。在“部分渲染”中,您只在 Canvas 上发生变化的部分进行绘制。

两者可以放在一起,这样您就可以只绘制发生变化的内容,并且仅在发生变化时绘制。这是理想的情况。

但是,如果某些东西始终在移动,则被动渲染不起作用;如果整个背景不断更新,则部分更新不起作用。

关于java - 被动渲染方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31816641/

相关文章:

java - 如何在java图形中使用x和y坐标定位形状?

java - 为什么我的 BufferStrategy 抛出 NullpointerException 以及如何修复它?

java - 修改android assets的HTML文件

java - 为什么我的程序不会进入 while 循环?

来自伪代码的 Java 模拟退火

C++ 对图形的像素级控制

java - Servlet 性能 : Generate Static Content Dynamically?

c# - 如何在 C# 中实现绘图器

c - 如何确定每次读取系统调用要读取的合理字节数?

java - AWT Canvas BufferStrategy 和调整大小闪烁