As I understood pygame drawing method, the 2nd argument of the blit function (screen.blit(surface, (0,0))
) tells pygame where to draw the given surface (like an offset to start drawing from, or rather a placement of the surface on the screen). Although, from recent experimenting, it seems that pygame surfaces placements are fixed, and that (0,0)
is used to crop the surface before pygame blit it to the screen, for efficiency purposes.
Are surfaces placement really fixed (is my latter observation correct)? and if so, is there another way to conveniently move an already drawn surface to another position on the screen? Or should i implement my own way of moving complex "drawable" objects?
Thanks!
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()
is always (0, 0).
When you blit
a Surface
on another Surface
, then each pixel is copied and placed at the corresponding position of the destination Surface
. Thus always a position has to be specified, when a Surface
is blit
on a destination Surface
.
[...] if so, is there another way to conveniently move an already drawn surface to another position [...]
You have a basic misunderstanding. A Surface
cannot be "moved". A Surface
is copied on the Surface
object which is associated to the game window.
A Surface
appears to be moving, because the entire scene is drawn in every frame. First the background is drawn, then the objects (Sprites, Surfaces) are drawn on top of the background and finally the display is updated (in every frame). If an object is placed at a slightly different position in every frame, then the object appears to be moving smoothly.