0

だから、私は基本的な Pygame に取り組んでおり、メカニズムの 1 つは弾丸スプライトをマウスに追従させて爆発させることです。しかし、バグが 2 つだけあります。

バグ 1:箇条書きを削除すると、bullet_list 内のすべての箇条書きが削除されます。なぜこれが起こるのか理解していますが、それを修正する方法がわかりません。解決済み

バグ 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

新しいバグ!私は pygame.event.get() に慣れておらず、おそらくここで何か間違ったことをしているのですが、pygame ドキュメントで提供されている例はあまり役に立ちません。複数のイベントが登録されていないように見えるため、複数のイベントの処理が修正されたかどうかはわかりません。コードが「ケーキ」を出力することはめったになく、非常に遅れており、スペースに当たったときに弾丸が発射されることはほとんどありません。

4

1 に答える 1

1

あなたのコードはサンプルにすぎないため、この回答がどの程度当てはまるかはわかりませんが、最善を尽くします。

バグ 1: forif dist < 30の dist は、別の for ループで計算しているため、更新されません。サンプルから、最初の「for bullet in bullet_list」ループの最後にキル チェックを含めることができるようです。

バグ 2:ステップごとに 1 つのイベントのみをチェックしているため、複数のイベント (つまり、マウスの動きとキーの押下) が発生した場合、それらのイベントのみを処理します。これを修正するには、すべてのイベントのリストを反復処理します。

for event in pygame.event.get():
    #Your "Checking Keys" code goes here
于 2013-06-11T14:55:37.473 に答える