Pygame (python) 中翻转图像的问题
Problem with flipping images in Pygame (python)
我正在尝试创建一个游戏,您可以在其中使用箭头键移动角色。向左或向右移动时,我希望角色(图像)翻转并相应地指向 left/right。原来的image/character是指向左边的。但是我无法让角色翻转,请帮助我,谢谢。
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
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_left
和 characterimg_right
,然后将它们分配给您的 characterimg
变量。
我正在尝试创建一个游戏,您可以在其中使用箭头键移动角色。向左或向右移动时,我希望角色(图像)翻转并相应地指向 left/right。原来的image/character是指向左边的。但是我无法让角色翻转,请帮助我,谢谢。
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
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_left
和 characterimg_right
,然后将它们分配给您的 characterimg
变量。