Pygame(python)中翻转图像的问题

2024-03-29 06:50:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个游戏,你可以用箭头键移动一个角色。当向左或向右移动时,我希望角色(图像)翻转并相应地指向左/右。原始图像/字符指向左侧。但是我不能让角色翻转,请帮帮我,谢谢。你知道吗

import pygame
pygame.init()#initiate pygame
black = (0,0,0)
white = (255,255,255)
red = (255,0,0)
display_width = 1200
display_height = 800
display = pygame.display.set_mode((display_width,display_height))
characterimg = pygame.image.load(r'/Users/ye57324/Desktop/Make/coding/python/characterimg.png')
def soldier(x,y):
    display.blit(characterimg, (x,y))
x = (display_width * 0.45)
y = (display_height * 0.1)
pygame.display.set_caption('Game')
clock = pygame.time.Clock()#game clock
flip_right = False
x_change = 0
y_change = 0
start = True


while start:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            start = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_change += -5
                if flip_right == True:
                    pygame.transform.flip(characterimg, True, False)
                    flip_right = False
            elif event.key == pygame.K_RIGHT:
                x_change += 5
                if flip_right == False:
                    pygame.transform.flip(characterimg, True, False)
                    flip_right = True
            elif event.key == pygame.K_UP:
                y_change += -5
            elif event.key == pygame.K_DOWN:
                y_change += 5
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                x_change += 5
            elif event.key == pygame.K_RIGHT:
                x_change += -5
            elif event.key == pygame.K_UP:
                y_change += 5
            elif event.key == pygame.K_DOWN:
                y_change += -5

    x += x_change
    y += y_change
    display.fill(white)
    soldier(x,y)
    pygame.display.update()
    clock.tick(60)#fps

Tags: keyrighteventfalsetrue角色ifdisplay
1条回答
网友
1楼 · 发布于 2024-03-29 06:50:27

Pygame关于pygame.transform.flip状态的文档页面

Flipping a Surface is non-destructive and returns a new Surface with the same dimensions.

这意味着传递给该方法的曲面不会受到影响。必须保持return-值,才能看到任何效果。你知道吗

实际上,这意味着你应该

pygame.transform.flip(characterimg, True, False)

characterimg = pygame.transform.flip(characterimg, True, False)

所以characterimg指向图像的新的翻转版本。你知道吗

注意:就性能而言,这不是一种很好的做事方法。每次调用pygame.transform.flip,pygame都必须为新曲面分配新内存,遍历原始曲面的每个像素,并将其复制到新曲面,在过程中变换其位置。最好在程序开始时翻转一次图像,这样就有了一个变量characterimg_leftcharacterimg_right,然后将它们分配给characterimg变量。你知道吗

相关问题 更多 >