Python 在游戏设计中,我们需要在每一帧中重新绘制整个窗口吗?

Python 在游戏设计中,我们需要在每一帧中重新绘制整个窗口吗?,python,pygame,Python,Pygame,我是pygame的新手。最近我遇到了一个关于场景代码结构的问题。 然而,我不确定总体逻辑 active_scene.ProcessInput(filtered_events, pressed_keys) active_scene.Update() active_scene.Render(screen) 在我的理解中,它有点像CVM模型。在上面的代码中,processInput()用于接受用户输入。Update()用于更新游戏的模型(或数据)。Render()是根据更新的模型绘制接口 我不

我是pygame的新手。最近我遇到了一个关于场景代码结构的问题。
然而,我不确定总体逻辑

 active_scene.ProcessInput(filtered_events, pressed_keys)
 active_scene.Update()
 active_scene.Render(screen)
在我的理解中,它有点像CVM模型。在上面的代码中,processInput()用于接受用户输入。Update()用于更新游戏的模型(或数据)。Render()是根据更新的模型绘制接口

我不明白的是,我们是否必须根据整个模型绘制视图(对不起,我不知道它在游戏设计中的术语)?我们能不能只画出需要改变的部分?例如,如果我想写一篇文章。我只需要画一个新的棋子,不用再画整个棋盘。但这意味着我们不仅要存储模型,还要存储模型中的更改。我不确定是否有一个优雅的方式做这件事

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

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

不同的游戏引擎处理屏幕更新的方式不同。在某些情况下,您只能更新屏幕中已更改的部分,这些部分的性能可能会稍好一些(因为您需要重新绘制的内容较少)。但这是以复杂性为代价的,因为你需要跟踪什么发生了变化,以及需要在那里绘制什么

重绘整个屏幕通常是你无论如何都需要做的事情,以绘制游戏的初始状态。在某些游戏中,屏幕的许多部分在每一帧上都会发生变化(例如,在相机移动的游戏中)。事实上,在这种最坏的情况下,您可能需要优化性能,因为在这种情况下,一切都在同时发生变化。通过不绘制屏幕的大部分可以获得性能优势的情况可能是性能不太重要的情况(因此,在不需要的情况下,您可以获得更好的性能)

为了解决Pygame问题,可以使用
sprite.DirtySprite
类为每个精灵标记一个标志,说明是否需要重新绘制。默认情况下,不会绘制属性为
0
dirty
精灵(使用
DirtySprite
友好
子类之一时)。如果将其设置为
1
,它将被重新绘制一次,然后
dirty
属性将再次设置为
0
。值
2
将使精灵始终重新绘制


但是请考虑一下,您是否真的需要处理跟踪哪些精灵是脏的这一复杂问题,或者您是否可以通过重新绘制所有内容来简化代码。如果您从simple开始,如果您发现需要增加性能,您可能会稍后回来并添加图形优化。

我认为这个问题应该在gamedev.stackexchange.com上询问。答案可能是:视情况而定。