首页 > 解决方案 > 如何用键盘旋转图像?

问题描述

img1 = pygame.image.load(r"C:\Users\ga-sa\Downloads\As.png")
img2 = pygame.image.load(r"C:\Users\ga-sa\Downloads\AssetsXOR.png")
img3 = pygame.image.load(r"C:\Users\ga-sa\Downloads\AssetsNOT.png")
img4 = pygame.image.load(r"C:\Users\ga-sa\Downloads\AssetsAND.png")
background = pygame.image.load(r'C:\Users\ga-sa\Downloads\honeycomb.png')
images = [img1, img2, img3, img4]

current_image = -1
img_rects = [images[i].get_rect(topleft=(20 + 40 * i, 20)) for i in range(len(images))]

LeftButton = 0
while 1:
    for e in pygame.event.get():
        if e.type == QUIT:
            pygame.quit()
            exit(0)

        if e.type == pygame.MOUSEBUTTONDOWN:
            mouse_rect = pygame.Rect(e.pos, (1, 1))
            current_image = mouse_rect.collidelist(img_rects)

        if e.type == MOUSEMOTION:
            if e.buttons[LeftButton]:
                rel = e.rel
                if 0 <= current_image < len(images):
                    img_rects[current_image].x += rel[0]
                    img_rects[current_image].y += rel[1]
    screen.blit(background,(0,0))
    for i in range(len(images)):
        screen.blit(images[i], img_rects[i])
    pygame.display.flip()
    pygame.time.delay(30)

pygame.display.fli()
pygame.display.update()
mainClock.tick(60)

我只是想旋转这个图像键盘,但不知道我该怎么做有人可以帮助我,完整的代码在这里 https://pastebin.com/Rb7jh2GH

标签: pythonpygamepygame-surface

解决方案


添加一个angle变量。用于pygame.key.get_pressed()获取键的状态(请参阅按住键时如何进行精灵移动)。根据按下的键更改angle依赖项:

keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]:
    angle -= 1
if keys[pygame.K_LEFT]:
    angle += 1

用于pygame.transform.rotate旋转图像。请参阅如何使用 PyGame 围绕其中心旋转图像?

for i in range(len(images)):
    rotated_image = pygame.transform.rotate(images[i], angle)
    rotated_rect = rotated_image.get_rect(center = img_rects[i].center)
    screen.blit(rotated_image, rotated_rect)

如果您只想旋转current_image,则需要角度列表

在此处输入图像描述

current_image = -1
img_rects = [images[i].get_rect(topleft=(20 + 40 * i, 20)) for i in range(len(images))]
img_angles = [0 for _ in range(len(images))]

LeftButton = 0
while 1:
    for e in pygame.event.get():
        if e.type == QUIT:
            pygame.quit()
            exit(0)

        if e.type == pygame.MOUSEBUTTONDOWN:
            mouse_rect = pygame.Rect(e.pos, (1, 1))
            current_image = mouse_rect.collidelist(img_rects)

        if e.type == MOUSEMOTION:
            if e.buttons[LeftButton]:
                rel = e.rel
                if 0 <= current_image < len(images):
                    img_rects[current_image].x += rel[0]
                    img_rects[current_image].y += rel[1]

    keys = pygame.key.get_pressed()
    if 0 <= current_image < len(img_angles):
        if keys[pygame.K_RIGHT]:
            img_angles[current_image] -= 1
        if keys[pygame.K_LEFT]:
            img_angles[current_image] += 1

    screen.blit(background,(0,0))
    
    for i in range(len(images)):
        rotated_image = pygame.transform.rotate(images[i], img_angles[i])
        rotated_rect = rotated_image.get_rect(center = img_rects[i].center)
        screen.blit(rotated_image, rotated_rect)

    pygame.display.flip()

推荐阅读