Pygame 表面定位

Pygame Surface Positioning

据我了解 pygame 绘图方法,blit function (screen.blit(surface, (0,0))) 的第二个参数告诉 pygame 在何处绘制给定表面(例如偏移到从表面开始绘制,或者更确切地说是屏幕上表面的放置)。虽然,从最近的实验来看,似乎 pygame 表面放置是固定的,并且 (0,0) 用于在 pygame 将其 blit 到屏幕之前裁剪表面,以提高效率。

表面放置是否真的固定(我后面的观察是否正确)?如果是这样,是否有另一种方法可以方便地将已绘制的表面移动到屏幕上的另一个位置?或者我应该实现自己的移动复杂 "drawable" 对象的方式吗?

谢谢!

A pygame.Surface object has no position, it has a size only. Note, the location of the Rect object which is returned by pygame.Surface.get_rect() 总是 (0, 0).
当你 blit 一个 Surface 在另一个 Surface 上时,每个像素被复制并放置在目标 Surface 的相应位置。因此,当目的地 Surface.

上的 Surfaceblit 时,始终必须指定位置

另见


[...] if so, is there another way to conveniently move an already drawn surface to another position [...]

你有一个基本的误解。 A Surface 不能被“移动”。 Surface 被复制到与游戏 window.
关联的 Surface 对象上 Surface 似乎在移动,因为整个场景都在每一帧中绘制。首先绘制背景,然后在背景之上绘制对象(Sprites、Surfaces),最后更新显示(在每一帧中)。如果一个对象在每一帧中的位置都略有不同,那么该对象看起来是平滑移动的。