Пассивный метод рендеринга
Я строю простой метод рендеринга игры. У меня есть статические изображения, такие как фон карты, которые вообще не меняются. Я просто использую около 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. Есть ли что-то еще, чтобы служить для этого? Также есть другой источник для Графика г? В Интернете было что-то о том, чтобы называть это directyl из Canvas, но я не запустил его для этого. Или я думаю об этом не с того угла?
1 ответ
Вы путаете пассивный рендеринг с частичными обновлениями. В "пассивном рендеринге" вы можете перерисовать все, но вы не делаете это 30fps. Вы делаете это только тогда, когда что-то движется. В "частичном рендеринге" вы рисуете только ту часть холста, которая изменилась.
Их можно сложить так, чтобы вы рисовали только то, что меняется, и только тогда, когда это меняется. Это идеальный случай.
Но пассивный рендеринг не работает, если что-то всегда движется, и частичные обновления не работают, если весь фон постоянно обновляется.