如果按下一个键,可以增加角度,然后变换原始图像,将其指定给
self.image
属性并获取一个新的矩形,该矩形的中心位于旧矩形的中心。
import pygame
class Config(object):
fullscreen = False
width = 640
height = 360
fps = 60
class Player(pygame.sprite.Sprite):
maxrotate = 360
down = (pygame.K_DOWN)
up = (pygame.K_UP)
def __init__(self, startpos=(100,223), angle=0):
super().__init__()
self.pos = list(startpos)
self.image = pygame.Surface((70, 70), pygame.SRCALPHA)
pygame.draw.circle(self.image, pygame.Color('dodgerblue'), (35, 35), 35)
pygame.draw.circle(self.image, pygame.Color('black'), (35, 15), 8)
self.orig_image = self.image
self.rect = self.image.get_rect(center=startpos)
self.angle = angle
def update(self, seconds):
pressedkeys = pygame.key.get_pressed()
if pressedkeys[self.down]:
self.angle -= 2
self.rotate_image()
if pressedkeys[self.up]:
self.angle += 2
self.rotate_image()
def rotate_image(self):
self.image = pygame.transform.rotate(self.orig_image, self.angle)
self.rect = self.image.get_rect(center=self.rect.center)
def main():
pygame.init()
screen=pygame.display.set_mode((Config.width,Config.height))
clock = pygame.time.Clock()
FPS = Config.fps
allgroup = pygame.sprite.LayeredUpdates()
player = Player()
allgroup.add(player)
mainloop = True
while mainloop:
millisecond = clock.tick(Config.fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
mainloop = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
mailoop = False
allgroup.update(millisecond)
screen.fill((50, 50, 70))
allgroup.draw(screen)
pygame.display.flip()
if __name__ == '__main__':
main()
pygame.quit()