Python pygame如何从玩家射击子弹

时间:2019-04-26 01:23:02

标签: 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()

1 个答案:

答案 0 :(得分:1)

请尝试这个。

按空格键时,将发射导弹。其计算公式为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和{如您所见,{1}}。

因此,我建议您编写如下内容。

my

为什么要设置这些点?

您的导弹是黑色的。而且播放器也是黑色的。 导弹从玩家身上发射。 两者都是黑色的,所以非常好。

如果您有任何疑问,请发表评论。


mx = px
my = py