Pygame - 2 клавиши останавливают струю - PullRequest
0 голосов
/ 18 июня 2020

Привет, ребята, я новичок в python и программировании в целом. Я начал делать свою игру с помощью pygame, но столкнулся с проблемой. Я создаю клише, в котором корабль стреляет в флот инопланетян.

Я заставил свой корабль двигаться, но, например:

Когда я нажимаю правую клавишу, а затем левую, они нажимаются одновременно, затем отпускают вправо, корабль останавливается из-за того, что pygame.keyup вызывает increment = 0 при отпускании правой клавиши.
Но я не знаю, как это исправить, чтобы я мог управлять кораблем без время от времени останавливается из-за быстрого переключения между клавишами.

Я ищу способ, когда я нажимаю клавишу, он игнорирует нажатие предыдущей клавиши, но когда я не нажимаю ни одной кнопки, корабль останавливается

Мой код:

import sys
import pygame

pygame.init()

# Setting up a window
screen = pygame.display.set_mode((1200,800))
screen_rect = screen.get_rect()


# Caption
pygame.display.set_caption("space shooter".title())


# Setting up the icon
icon = pygame.image.load("undertake.png").convert_alpha()
pygame.display.set_icon(icon)


# Identifying a Background
bg = pygame.image.load("bg.png").convert_alpha()


# Adding the jet
jet = pygame.image.load("jet.png").convert_alpha()
jet_rect = jet.get_rect()
jet_rect.centerx = screen_rect.centerx
jet_rect.bottom = screen_rect.bottom
jet_xincrement=0


# Moving the jet
def move_jet(x):
    jet_rect.centerx += x


# Adding Boundaries
def boundaries():
    if jet_rect.left >= 1200:
        jet_rect.right = 0
    elif jet_rect.right <= 0:
        jet_rect.left = 1200


# Game Loop
while True:
    screen.blit(bg,(0,0))
    screen.blit(jet,jet_rect)

    # EVENTS
    for event in pygame.event.get():
        # Quitting
        if event.type == pygame.QUIT:
            sys.exit()

        # Key Strokes
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                jet_xincrement = 3
            elif event.key == pygame.K_LEFT:
                jet_xincrement = -3

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
                jet_xincrement = 0


    boundaries()
    move_jet(jet_xincrement)



    pygame.display.flip()

1 Ответ

0 голосов
/ 18 июня 2020

Вместо того, чтобы слушать ключевые события, просто проверьте текущее состояние клавиш с помощью pygame.key.get_pressed().

Измените свое событие l oop на что-то вроде этого.

    ...

    # EVENTS
    for event in pygame.event.get():
        # Quitting
        if event.type == pygame.QUIT:
            sys.exit()

    pressed = pygame.key.get_pressed()
    jet_xincrement = 0
    if pressed[pygame.K_RIGHT]: jet_xincrement += 3
    if pressed[pygame.K_LEFT]: jet_xincrement -= 3

    boundaries()
    move_jet(jet_xincrement)

    pygame.display.flip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...