1

我正在构建一个简单的游戏渲染方法。我有一个像地图背景这样的静态图像,根本没有改变。我只是使用整个屏幕的 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 秒重绘一次,所以如果你没有任何东西要绘制,你会得到黑色画布,上面什么都没有......所以你必须总是重绘每次更新的所有内容......如果我不绘制背景,缓冲区开始像地狱一样闪烁......所以我必须有一些东西来掩盖那些东西。

我在互联网上搜索并没有发现关于这种渲染类型的其他解决方案的任何内容。主动渲染的东西很多,但对于 Draw and wait 方法却一无所获。

我认为使用 BufferStrategy 是不可能做到这一点的。还有什么可以为此服务的吗?Graphics g 还有其他来源吗?在互联网上,有人将它从 Canvas 中称为 directyl,但我并没有为此运行它。还是我从错误的角度考虑它?

4

1 回答 1

2

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

两者可以放在一起,这样你只画什么变化,只有当它变化时。那是理想的情况。

但是,如果某些东西总是在移动,那么被动渲染就不起作用,如果整个背景不断更新,部分更新就不起作用。

于 2015-08-04T18:35:45.980 回答