Pygame在移动鼠标时创建精灵

时间:2013-06-10 23:04:21

标签: position mouse pygame sprite space

所以,我正在研究一个基本的Pygame,其中一个机制就是用一个子弹精灵跟随鼠标并爆炸。但我只有两个错误。

BUG 1:删除子弹会删除bullet_list中的所有项目符号。我理解为什么会发生这种情况,但我不知道如何纠正它。的解决

BUG 2:移动鼠标似乎会覆盖按键检测。移动鼠标时无法移动或射击子弹。

更新

#Checking Keys
for event in pygame.event.get():
    print("CAKE")
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_DOWN:
            pPlayer.image = pDown
            pPlayer.chy = 2
        elif event.key == pygame.K_UP:
            pPlayer.image = pUp
            pPlayer.chy = -2
        elif event.key == pygame.K_LEFT:
            pPlayer.image = pLeft
            pPlayer.chx = -2
        elif event.key == pygame.K_RIGHT:
            pPlayer.image = pRight
            pPlayer.chx = 2
        elif event.key == pygame.K_SPACE:
            if pPlayer.canFire == True:
                bullet = Bullet()
                bullet.rect.x = int(player.x)
                bullet.rect.y = int(player.y)
                all_sprites_list.add(bullet)
                bullet_list.add(bullet)
                pPlayer.canFire = False
        elif event.key == pygame.K_ESCAPE:
            if gameState.togglePause == True:
                if gameState.pause == True:
                    gameState.game = True
                    gameState.pause = False
                elif gameState.pause == False:
                    gameState.game = False
                    gameState.pause = True
                gameState.togglePause = False
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_DOWN or event.key == pygame.K_UP:
            pPlayer.chy = 0
        elif event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            pPlayer.chx = 0
        elif event.key == pygame.K_SPACE:
            pPlayer.canFire = True
        elif event.key == pygame.K_ESCAPE:
            gameState.togglePause = True
        else:
            pPlayer.chx = 0
            pPlayer.chy = 0

新Bug!我不熟悉pygame.event.get(),我可能在这里做错了,但pygame文档提供的示例并没有太大帮助。我不知道它是否修复了多个事件的处理,因为它似乎甚至没有注册它们。该代码很少打印出“蛋糕”并且非常延迟,当我击中太空时很少发射任何子弹。

1 个答案:

答案 0 :(得分:1)

我不知道这个答案有多好,因为你的代码只是一个样本,但我会尽我所能。

错误1:对于if dist < 30,dist不会更新,因为您在不同的for循环中进行计算。从您的示例中,您可以在第一个“for bullet in bullet_list”循环的末尾包含kill检查。

错误2:您每步只检查一个事件,因此当发生多个事件(即鼠标移动和按键)时,您只能处理它们。要解决此问题,请遍历所有事件的列表:

for event in pygame.event.get():
    #Your "Checking Keys" code goes here