rotozoom pygame geometry-surface

rotozoom - Pygame cómo cambiar el tamaño de una superficie?



pygame image editing (2)

¿Cómo se cambia el tamaño de una superficie en pygame que tiene una imagen (sin escalar)? Cuando cargo una imagen en pygame, la superficie se convierte en el tamaño de la imagen. Necesito cambiar el tamaño de la superficie para que sea del tamaño de un marco (hoja de sprites).

Este es el código que utilicé para resolver el problema (gracias a Chris Dennett):

self.surface = pygame.Surface((20, 20)) self.surface.blit(pygame.image.load(imageName).convert_alpha(), (0,0), (0, 0, frameWidth, frameHeight))


Crea una nueva superficie, pasando el ancho y la altura deseados como argumentos (es decir, qué tan grande es el sprite). Luego use newsurf.blit(spritesheet, (0, 0), (posX, posY, newsurf.getWidth(), newsurf.getHeight())) . Deberia trabajar. Entonces puedes usar Newsurf como tu sprite. posX y posY deberían ser la xey de la que quieras blitzar en tu hoja de sprites, respectivamente.


Para las hojas de sprites, tienes 2 buenas opciones.

1) Carga spritesheet como una superficie.

Cuando blitting, use el argumento source rect. Esto cortará solo un cuadro de la hoja.

2) Usa subsurfaces.

Cargue la hoja de sprites como una superficie. Cargue un subsuelo, de cada cuadro que desee: http://www.pygame.org/docs/ref/surface.html#Surface.subsurface

En lo que a usted respecta, el subsuelo es una superficie "nueva", con el ancho y la altura de la celda. Pero, no es memoria duplicada. Está vinculado.

De los documentos:

Devuelve una nueva Superficie que comparte sus píxeles con su nuevo elemento primario. La nueva superficie se considera un hijo del original. Las modificaciones a cualquiera de los píxeles de superficie se afectarán entre sí. La información de la superficie, como el área de recorte y las teclas de color, son exclusivas de cada superficie.