Sin memoria cuando se usa pygame.transform.rotate

Escribí un script que le permite a un usuario controlar el sprite de un águila para volar alrededor y aprender pygame. Parecía bien hasta que implementé una función de rotación que hace que el sprite gire de acuerdo con la dirección en la que está volando. El sprite se vuelve realmente borroso después de moverse un corto tiempo y pronto aparece un error que dice sin memoria (en esta línea: eagle_img = pygame.transform.rotate (eagle_img, new_angle-angle) )

Mi código:

# eagle movement script import pygame, math, sys from pygame.locals import * pygame.init() clock = pygame.time.Clock() # terminate function def terminate(): pygame.quit() sys.exit() # incircle function, check if mouse click is inside controller def incircle(coordinates,cir_center,cir_out_rad): if math.sqrt((coordinates[0]-cir_center[0])**2+\ (coordinates[1]-cir_center[1])**2)  0: eagle.left += dx if eagle.right  0: eagle.top += dy if eagle.bottom < screenh: eagle.bottom += dy if rotate: new_angle = rotation(position,cir_center) if new_angle != angle: eagle_img = pygame.transform.rotate(eagle_img,new_angle-angle) eagle = eagle_img.get_rect(center=eagle.center) rotate = False angle = new_angle outer_circle = pygame.draw.circle(screen,grey,(cir_center[0],cir_center[1]),\ cir_out_rad,3) inner_circle = pygame.draw.circle(screen,grey,(position[0],position[1]),\ cir_in_rad,1) screen.blit(eagle_img,eagle) pygame.display.update() clock.tick(fps) 

Por favor, dime qué está mal aquí y cómo puedo mejorarlo. Siéntase libre de probar el código usando un sprite llamado “eagle1.png”. ¡Gracias!

La razón por la que su imagen de águila se está volviendo borrosa es porque gira continuamente el mismo png y no hace una copia y la gira mientras mantiene una imagen no editada. Aquí hay una función que siempre he usado al rotar imágenes cuadradas

 def rot_center(image, angle): """rotate an image while keeping its center and size""" orig_rect = image.get_rect() rot_image = pygame.transform.rotate(image, angle) rot_rect = orig_rect.copy() rot_rect.center = rot_image.get_rect().center rot_image = rot_image.subsurface(rot_rect).copy() return rot_image 

Aquí hay uno para cualquier forma de imagen.

 def rot_center(image, rect, angle): """rotate an image while keeping its center""" rot_image = pygame.transform.rotate(image, angle) rot_rect = rot_image.get_rect(center=rect.center) return rot_image,rot_rect 

fuente de aquí

En cuanto al error de “memoria insuficiente”, no lo sé con seguridad, pero supongo que la fuga se debe a la rotación del mismo archivo png una y otra vez. De alguna investigación que parece ocurrir a menudo con otras personas.

Espero que esto ayude a aclarar algunas cosas 🙂