Python Pygame, как стрелять пулями из игрока - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь получить свой код для стрельбы по pygame.rect по экрану из локации игрока. Прямо сейчас он стреляет, но когда я отпускаю кнопку пробела, он не сбрасывает прямоугольник. У меня настроено изменение координаты х, но я хочу сбросить его после того, как отпущу кнопку пробела.

if event.key == pygame.K_SPACE: mx_change = -100

можно ли использовать event.key == pygame.KEYUP: как-то его сбросить?

    import pygame #####IMPORTING PYGAME MODULE###########################

    pygame.init() 
    #####INITIALIZINGPYGAME##################################

    gameWindow = pygame.display.set_mode((800,600)) ###Screen Width and 
    Height###

    clock = pygame.time.Clock() ## FRAMES PER SECOND ##

    white = (255,255,255)
    black = (0,0,0)


    def player(px,py):
    pygame.draw.rect(gameWindow,black,[px,py,30,30])

    def missile(mx,my):
    pygame.draw.rect(gameWindow,black,[mx,my,10,10])


    def gameloop():

        px = 700
        py = 300

        mx = 700
        my = 300

        px_change = 0
        py_change = 0

        mx_change = 0
        my_change = 0

        gameExit = False

        while not gameExit:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    gameExit = True
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        mx_change = -10
                    if event.key == pygame.K_RIGHT:
                        mx_change = 10
                    if event.key == pygame.K_UP:
                        my_change = -10
                    if event.key == pygame.K_DOWN:
                        my_change = 10

                    if event.key == pygame.K_SPACE:
                        mx_change = -100


                    if event.key == pygame.K_LEFT:
                        px_change = -10
                    if event.key == pygame.K_RIGHT:
                        px_change = 10
                    if event.key == pygame.K_UP:
                        py_change = -10
                    if event.key == pygame.K_DOWN:
                        py_change = 10

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                px_change = 0
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                py_change = 0

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                mx_change = 0
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                my_change = 0
            if event.key == pygame.K_SPACE:
                mx_change = 0
                my_change = 0


    px += px_change
    py += py_change

    mx += mx_change
    my += my_change

    gameWindow.fill(white)

    player(px,py)
    missile(mx,my)
    pygame.display.update()

    clock.tick(15)

pygame.quit()
quit()
gameloop()

1 Ответ

1 голос
/ 26 апреля 2019

Пожалуйста, попробуйте это.

Когда вы нажимаете клавишу пробела, вы запускаете ракету. Она рассчитывается как mx_change = -100 Но вы нажимаете кнопку во второй раз, ракета никогда не запускалась.

Потому что вы забыли переписать переменную.

if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
    mx_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
    my_change = 0
if event.key == pygame.K_SPACE:
    mx_change = 0
    my_change = 0

Конечно, вы можете изменить mx_change & my_change, но вы пропустите его через функцию missile. То есть, как вы видите, положение ракеты определяется mx & my.

Поэтому я рекомендую вам написать следующее.

mx = px
my = py

Почему я устанавливаю эти точки?

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

Если у вас есть какие-либо вопросы, пожалуйста, задавайте их по комментарию.


import pygame #####IMPORTING PYGAME MODULE###########################

pygame.init() 
#####INITIALIZINGPYGAME##################################

gameWindow = pygame.display.set_mode((800,600)) ###Screen Width and Height###

clock = pygame.time.Clock() ## FRAMES PER SECOND ##

white = (255,255,255)
black = (0,0,0)


def player(px,py):
    pygame.draw.rect(gameWindow,black,[px,py,30,30])

def missile(mx,my):
    pygame.draw.rect(gameWindow,black,[mx,my,10,10])


def gameloop():

    px = 700
    py = 300

    mx = 700
    my = 300

    px_change = 0
    py_change = 0

    mx_change = 0
    my_change = 0

    gameExit = False

    while not gameExit:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    mx_change = -10
                if event.key == pygame.K_RIGHT:
                    mx_change = 10
                if event.key == pygame.K_UP:
                    my_change = -10
                if event.key == pygame.K_DOWN:
                    my_change = 10

                if event.key == pygame.K_SPACE:
                    mx_change = -100


                if event.key == pygame.K_LEFT:
                    px_change = -10
                if event.key == pygame.K_RIGHT:
                    px_change = 10
                if event.key == pygame.K_UP:
                    py_change = -10
                if event.key == pygame.K_DOWN:
                    py_change = 10

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    px_change = 0
                if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                    py_change = 0


                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    mx_change = 0
                    mx = px
                if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                    my_change = 0
                    my = py
                if event.key == pygame.K_SPACE:
                    mx_change = 0
                    my_change = 0
                    mx = px
                    my = py

            px += px_change
            py += py_change

            mx += mx_change
            my += my_change

            gameWindow.fill(white)
            player(px,py)
            missile(mx,my)

            pygame.display.update()

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