Я пытаюсь создать игру, в которой вы можете перемещать персонажа с помощью клавиш со стрелками. При движении влево или вправо я хочу, чтобы персонаж (изображение) переворачивался и указывал влево / вправо соответственно. Исходное изображение / персонаж указывает влево. Но я не могу заставить персонажа перевернуться, пожалуйста, помогите мне, спасибо.
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
flip_right
. Я предполагаю, что вы хотели отрегулировать его значение после того, как перевернете изображение, чтобы отразить направление, в котором в данный момент смотрит ваш персонаж. - person Nearoo   schedule 07.10.2018flip
, как и вы. В нем говорится, что «Перевернуть поверхность» неразрушающим образом, и возвращается новая поверхность с теми же размерами. Это означает, что поверхность, по которой вы проходите, не изменяется, то есть вы должны написатьcharacterimg = pygame.transform.flip(characterimg...)
. Научитесь читать документацию! :) - person Nearoo   schedule 07.10.2018flip
не изменяет никаких данных, содержащихся в проходящей вами поверхности, то естьcharacterimg
. Он только считывает данные, а затем записывает перевернутое изображение на новую поверхность, которую затем возвращает. (PS: я хотел сказать, что поверхность, по которой вы проезжаете, не изменилась). Вот почему вам нужно перезаписать вашуcharacterimg
переменную. Чтобы он содержал новую, перевернутую версию вашей поверхности. - person Nearoo   schedule 07.10.2018characterimg
. Вашcharacterimg
- это поверхность, которую вы копируете в своемsoldier
методе, верно? Таким образом, любая поверхность, на которую в настоящее время указываетcharacterimg
, отображается на экране. Поэтому нам нужно сделать так, чтобыcharacterimg
указывал на новую перевернутую версию, возвращаемую pygame.transform.flip (...). - person Nearoo   schedule 07.10.2018flip_right
и заранее создал левое и правое изображения. Затем вы можете просто назначить текущее изображение переменнойcharacterimg
, когда пользователь нажимает влево или вправо, например.characterimg = characterimg_left
иcharacterimg = characterimg_right
. - person skrx   schedule 07.10.2018