Перемещение спрайтов с ключевыми событиями в Pygame - PullRequest
2 голосов
/ 10 октября 2011

Я только что получил спрайт, перемещающийся по окну, используя "w, a, s, d", и я хочу, чтобы этот спрайт "стрелял", нажимая клавишу пробела.Получается, что спрайт появляется, но не двигается, пока я не отпущу пробел, и я хочу, чтобы выстрел спрайта шел вперед до конца окна, просто нажимая пробел, а не отпуская его.

Это мой основной цикл:

while pygame.event.poll().type != QUIT:


    screen.blit(background, (0, 0))

    #"player" is the sprite moving around the window
    player.move(width,height)
    screen.blit(player.image, player.rect)
    key = pygame.key.get_pressed()

    if key[K_SPACE]:
        xpos = player.rect.right
        ypos = player.rect.top
        shot_on_screen = True


    if shot_on_screen:
        xpos += 1
        #"kame" is the sprite i want to move forward
        screen.blit(shot.kame, (xpos, ypos))
    else:
        shot.x = player.rect.right
        shot.y = player.rect.top
        shot_on_screen = False


    pygame.display.update()

Я новичок в этом мире python-pygame, я проверил много руководств и документации, прежде чем спросить, надеюсь, вы поможете, спасибо.

1 Ответ

0 голосов
/ 11 октября 2011

Вы устанавливаете xpos на самую правую позицию игрока в каждом цикле, когда нажата K_SPACE. Ты не должен этого делать. Попробуйте удалить эту строку.

if key[K_SPACE]:
    ypos = player.rect.top
    shot_on_screen = True

Кроме того, я не знаю, проверяете ли вы, находится ли снимок на экране где-то еще в коде, но отправленный вами код не установит для него значение false.

if shot_on_screen:
    xpos += 1
    #"kame" is the sprite i want to move forward
    screen.blit(shot.kame, (xpos, ypos))
else:
    shot.x = player.rect.right
    shot.y = player.rect.top
    shot_on_screen = False # won't work. It is already False.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...