Проблема с переворачиванием изображений в Pygame (python) - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь создать игру, в которой вы можете перемещать персонажа с помощью клавиш со стрелками.При перемещении влево или вправо я хочу, чтобы персонаж (изображение) переворачивался и указывал влево / вправо соответственно.Исходное изображение / символ указывает влево.Но я не могу заставить персонажа перевернуться, пожалуйста, помогите мне, спасибо.

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

1 Ответ

0 голосов
/ 08 октября 2018

Страница документации Pygame о pygame.transform.flip состояниях

Перелистывание поверхности неразрушающее и возвращает новую поверхность с такими же размерами.

Это означает, чтоповерхность, которую вы передаете этому методу, остается неизменной.Вы должны сохранить значение return , чтобы увидеть какой-либо эффект.

На практике это означает, что вы должны заменить

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

на

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

Так что characterimg указывает на новую, перевернутую версию изображения.

Примечание: С точки зрения производительности, это не очень хороший метод ведения дел.Каждый раз, когда вы вызываете pygame.transform.flip, pygame должен выделять новую память для новой поверхности, проходить через каждый пиксель исходной поверхности и копировать его на новую поверхность, преобразуя свое положение в процессе.Вам лучше перевернуть изображение один раз в начале вашей программы, чтобы у вас были переменные characterimg_left и characterimg_right, а затем просто присвоить их вашей переменной characterimg.

...