Python pygame如何从玩家那里射出子弹



我正在尝试让我的代码从玩家位置在屏幕上拍摄pygame.rect。现在它正在拍摄,但是当我松开空格按钮时,它不会重置矩形。我已将其设置为更改 x 坐标,但我希望它在释放空格按钮后重置。

如果 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()

请尝试这个。

当您按下空格键时,您将发射导弹。它的计算方式为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_changemy_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()

最新更新