Попытка заставить моего игрока transfrom.flip python - PullRequest
0 голосов
/ 28 августа 2018

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

run = True

while run:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False

        if event.type == pg.KEYDOWN:
            if event.key == pg.K_RIGHT:
                swordsman = pg.transform.flip(swordsman, True, False)
                x += speed

            if event.key == pg.K_LEFT:
                swordsman = pg.transform.flip(swordsman, True, False)
                x -= speed

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вы можете проверить состояние клавиш с помощью pg.key.get_pressed(), чтобы увидеть, нажаты ли & leftarrow; или & rightarrow; (как в примере ниже ) или в качестве альтернативы, измените переменную speed на другое значение в цикле событий, а затем измените позицию x (x += speed) каждого кадра в цикле while, не входящего в цикл событий (сбросьте скорость до 0, когда клавиша отпущена).

Что касается переворачивания изображения, сохраните ссылку на исходное изображение и присвойте ее переменной swordsman. Когда игрок хочет двигаться в другом направлении, переверните исходное изображение и назначьте его (просто назначьте исходное изображение, если они перемещаются в исходном направлении).

import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BG_COLOR = pg.Color('gray12')
# This is the original swordsman image/surface (just a
# rectangular surface with a dark topleft corner).
SWORDSMAN_ORIGINAL = pg.Surface((30, 50))
SWORDSMAN_ORIGINAL.fill((50, 140, 200))
pg.draw.rect(SWORDSMAN_ORIGINAL, (10, 50, 90), (0, 0, 13, 13))
# Assign the current swordsman surface to another variable.
swordsman = SWORDSMAN_ORIGINAL
x, y = 300, 200
speed = 4

run = True
while run:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False
        elif event.type == pg.KEYDOWN:
            if event.key == pg.K_RIGHT:
                # When the player presses right, flip the original
                # and assign it to the current swordsman variable.
                swordsman = pg.transform.flip(SWORDSMAN_ORIGINAL, True, False)
            elif event.key == pg.K_LEFT:
                # Here you can just assign the original.
                swordsman = SWORDSMAN_ORIGINAL

    # Check the state of the keys each frame.
    keys = pg.key.get_pressed()
    # Move if the left or right keys are held.
    if keys[pg.K_LEFT]:
        x -= speed
    elif keys[pg.K_RIGHT]:
        x += speed

    screen.fill(BG_COLOR)
    screen.blit(swordsman, (x, y))
    pg.display.flip()
    clock.tick(60)

pg.quit()
0 голосов
/ 29 августа 2018

Является ли swordsman pygame.Sprite объектом? Если это так, он должен содержать сам объект pygame.Rect. Переменная x - это всего лишь одна переменная, и ее изменение не влияет на swordsman. Попробуйте swordsman.rect.x = x

...