在游戏设计中,我们是否必须在每个帧中重新绘制整个窗口?

问题描述 投票:0回答:2

我是pygame的新手。最近,我遇到了有关场景代码结构的tutorial。但是,我不确定整体逻辑。

 active_scene.ProcessInput(filtered_events, pressed_keys)
 active_scene.Update()
 active_scene.Render(screen)

据我了解,它有点像CVM模型。在上面的代码中,processInput()将接受用户输入。 Update()用于更新游戏的模型(或数据)。 Render()将根据更新的模型绘制界面。

我不了解的部分是,我们是否必须基于整个模型来绘制视图(对不起,我在游戏设计中不知道它的用语?)我们能否只画出需要改变的地方?例如,如果我想写一个Go game。我只需要绘制新零件而不必再次绘制整个电路板。但这意味着我们不仅必须存储模型,还必须存储模型中的change。我不确定是否有一种优雅的方法。

所以我的问题是:在游戏设计中,是否最好每帧更新整个视图还是仅更新更改的位?它在多大程度上影响游戏的性能(处理速度)?

python pygame
2个回答
0
投票

我认为您必须在每个时钟滴答时重置屏幕,而不是场景中的每个更改。


0
投票

[不同的游戏引擎处理屏幕更新的方式各不相同。在某些情况下,您只能更新屏幕上已更改的部分,这些部分的性能可能会稍好一些(因为重绘的次数较少)。但这是以复杂性为代价的,因为您需要跟踪已更改的内容以及在此处绘制的内容。

重新绘制整个屏幕可能更容易,因为您仍然需要这样做才能绘制初始游戏状态。在某些游戏中,每帧画面的许多部分都会改变(例如,在摄像机移动的游戏中)。实际上,您可能主要需要针对这种最坏的情况(即所有情况都在变化)的最优化性能。通过不绘制大部分保留不变的屏幕来获得性能优势的情况可能是性能不太关键的情况(因此,在不需要的情况下,您可以获得更好的性能)。

[专门针对Pygame,sprite.DirtySprite类可让您用标记标记每个sprite,该标记指示是否需要重绘。默认情况下,将不绘制dirty属性为0的精灵(使用DirtySprite友好Group子类之一时)。如果将其设置为1,它将被重绘一次,然后dirty属性将再次设置为0。值2将使精灵始终被重绘。

但是请考虑一下您是否实际上需要处理跟踪哪些精灵脏污的复杂性,或者是否可以通过重绘所有内容来简化代码。如果您从简单开始,则可能稍后再回来,如果发现需要增强的性能,请添加图纸优化。

© www.soinside.com 2019 - 2024. All rights reserved.