プレイヤーを動かすと、スプライトであるプレイヤーと風船が吃音するのはなぜだろうか。

タルハ

モーションコントロールであるWASDキーを使用すると、フレームがドロップし、基本的にゲームが停止します。水風船を動かすはずですが、動かなくなると水風船も動きます。どちらもスプライトです。スプライトファミリーが2つあるので、混乱させたかもしれません。

main.py:

import pygame
from player import Player
from projectile import WaterBaloon

# Start the game
pygame.init()
game_width = 1000
game_height = 650
screen = pygame.display.set_mode((game_width, game_height))
clock = pygame.time.Clock()
running = True

bg_image = pygame.image.load("../assets/BG_Sand.png")

#make all the sprite groups
playerGroup = pygame.sprite.Group()
projectilesGroup = pygame.sprite.Group()

#put every sprite class in a group
Player.containers = playerGroup
WaterBaloon.containers = projectilesGroup
#tell the sprites where they are gonna be drawn at
mr_player = Player(screen, game_width/2, game_height/2)

# ***************** Loop Land Below *****************
# Everything under 'while running' will be repeated over and over again
while running:
    # Makes the game stop if the player clicks the X or presses esc
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            running = False
            
        #player input that detects keys (to move)       
        keys = pygame.key.get_pressed()
        if keys[pygame.K_d]:
            mr_player.move(1, 0)
        if keys[pygame.K_a]:
            mr_player.move(-1, 0)
        if keys[pygame.K_w]:
            mr_player.move(0, -1)
        if keys[pygame.K_s]:
            mr_player.move(0, 1)
        if pygame.mouse.get_pressed()[0]:
            mr_player.shoot()
#blit the bg image
        screen.blit((bg_image),(0, 0))
#update the player
        mr_player.update()
#update all the projectiles
        for projectile in projectilesGroup:
            projectile.update()
            
        # Tell pygame to update the screen
        pygame.display.flip()
        clock.tick(60)
        pygame.display.set_caption("ATTACK OF THE ROBOTS fps: " + str(clock.get_fps()))

player.py:

import pygame
import toolbox
import projectile
#Players Brain
class Player(pygame.sprite.Sprite):
#player constructor function
    def __init__(self, screen, x, y):
        pygame.sprite.Sprite.__init__(self, self.containers)
        self.screen = screen
        self.x = x
        self.y = y
        self.image = pygame.image.load("../assets/player_03.png")
        #rectangle for player sprite
        self.rect = self.image.get_rect()
        self.rect.center = (self.x, self.y)
        #end of rectangle for player sprite
        self.speed = 8
        self.angle = 0
        
    #player update function
    def update(self):
        self.rect.center = (self.x, self.y)

        mouse_x, mouse_y = pygame.mouse.get_pos()
        self.angle = toolbox.angleBetweenPoints(self.x, self.y, mouse_x, mouse_y)
            
        #get the rotated version of player
        image_to_draw, image_rect = toolbox.getRotatedImage(self.image, self.rect, self.angle)
        
        
        self.screen.blit(image_to_draw, image_rect)
        
    #tells the computer how to make the player move
    def move(self, x_movement, y_movement):
        self.x += self.speed * x_movement
        self.y += self.speed * y_movement

#shoot function to make a WaterBaloon
    def shoot(self):
        projectile.WaterBaloon(self.screen, self.x, self.y, self.angle)
Blckknght

フレームごとに1つのイベントのみを処理しています。これは、実行するすべてのことをイベント処理ループのフレーム内に配置したためですイベント(キーの押下イベントやリリースイベントなど)をより高いレートで取得し始めると、これは機能しなくなる可能性があります。イベントがすべて処理されていない場合、プログラムが画面を正しく更新しない可能性があります。

おそらく、メインループでループ内のイベント処理のみを実行する必要がありfor event in pygame.event.get():ます。while running:保留中のすべてのイベントが処理された後、外側のループ内で実行されるように、他のすべては1つのレベルでインデントを解除する必要があります。

次のようなものを試してください。

while running:
    # Makes the game stop if the player clicks the X or presses esc
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            running = False
            
    #player input that detects keys (to move)    # unindent here (and all the lines below)
    keys = pygame.key.get_pressed()
    ...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

このツールを装備しないと、プレイヤーがRobloxのマップの中央に移動するのはなぜですか?

分類Dev

Unityマルチプレイヤーでどのプレイヤーがホストであるかを見つける方法はありますか?

分類Dev

プレーヤーのスプライトと同じフレームをカメラで更新するにはどうすればよいですか?

分類Dev

サブレイヤーを追加するとサブビューがオーバーラップするのはなぜですか?

分類Dev

Rigidbodyプレーヤーコントローラーが機能しないのはなぜですか?プレイヤーを動かすことができません

分類Dev

再起動時にワイヤレスドライバを再インストールする必要があるのはなぜですか?

分類Dev

サプライヤーは、文字列のような不変オブジェクトである場合、ストリームのコレクト()端末操作では、何が起こるのだろうか?

分類Dev

ホストプレイヤーにサーバーを送信する権限がないのはなぜですか[コマンド]?Unity-ミラー

分類Dev

埋め込みレイヤーの出力でドロップアウトを使用すると、配列の値が変わるのはなぜですか?

分類Dev

デーモンプロセスを生成するときにutf8IOレイヤーが削除されるのはなぜですか?

分類Dev

ドロップアウトレイヤーがケラでトレーニング可能であるとはどういう意味ですか?

分類Dev

なぜプレイヤーはその位置を動かした後に倒れるのですか?

分類Dev

tensorflowレイヤーとkerasSimpleRNNレイヤーにtanhのデフォルトのアクティベーションがあるのはなぜですか

分類Dev

Androidでスプラッシュスクリーンのレイヤーリストを拡張するときにエラーが発生するのはなぜですか

分類Dev

スケルトンがプレイヤーにダメージを与えないのはなぜですか?

分類Dev

CNNで完全に接続されたレイヤーを「トップレイヤー」と呼ぶのはなぜですか?

分類Dev

スプライトがタスクを終了したときに、スプライトがスプライトの所有者(レイヤー)を呼び出してスプライトを削除するようにするにはどうすればよいですか?

分類Dev

プレイヤーが近接プロンプトと対話するとき、プレイヤーがツールを持っているかどうかをチェックし、持っていない場合は、機能を実行します-ROBLOX STUDIO

分類Dev

プレーヤークラスで、プレーヤーの子としてヒットボックススプライトを作成しました。gamesceneのdidBeginメソッドでそのヒットボックススプライトにアクセスするにはどうすればよいですか?

分類Dev

VLCプレーヤーが.apeファイルをすべて1つの曲として再生するのはなぜですか?

分類Dev

Flashプレーヤーで音楽を再生するときにChromeが不具合するのはなぜですか?

分類Dev

JavaFXとスプライトアニメーション、プレーヤースプライトの画像を変更するアニメーションサイクルを作成するにはどうすればよいですか?

分類Dev

Windowsは、どのネットワークアダプタがワイヤレスデバイスであるかをどのように認識しますか?

分類Dev

タグに評価を書き込むことができる音楽プレーヤーはどれですか、または:再インストール時に曲の評価が失われないようにするにはどうすればよいですか?

分類Dev

UNIX OSにGUIレイヤーがあるのか、それともコマンドラインのみなのかをJavaアプリケーションで知るにはどうすればよいですか?

分類Dev

ssdとyoloにroiプーリングレイヤーがないのはなぜですか?

分類Dev

どの音楽プレーヤーがタグに評価を書き込むことができますか、または:再インストール時に曲の評価を失わないようにするにはどうすればよいですか?

分類Dev

どの音楽プレーヤーがタグに評価を書き込むことができますか、または:再インストール時に曲の評価を失わないようにするにはどうすればよいですか?

分類Dev

プレイヤーを動かすと敵の動きが止まります

Related 関連記事

  1. 1

    このツールを装備しないと、プレイヤーがRobloxのマップの中央に移動するのはなぜですか?

  2. 2

    Unityマルチプレイヤーでどのプレイヤーがホストであるかを見つける方法はありますか?

  3. 3

    プレーヤーのスプライトと同じフレームをカメラで更新するにはどうすればよいですか?

  4. 4

    サブレイヤーを追加するとサブビューがオーバーラップするのはなぜですか?

  5. 5

    Rigidbodyプレーヤーコントローラーが機能しないのはなぜですか?プレイヤーを動かすことができません

  6. 6

    再起動時にワイヤレスドライバを再インストールする必要があるのはなぜですか?

  7. 7

    サプライヤーは、文字列のような不変オブジェクトである場合、ストリームのコレクト()端末操作では、何が起こるのだろうか?

  8. 8

    ホストプレイヤーにサーバーを送信する権限がないのはなぜですか[コマンド]?Unity-ミラー

  9. 9

    埋め込みレイヤーの出力でドロップアウトを使用すると、配列の値が変わるのはなぜですか?

  10. 10

    デーモンプロセスを生成するときにutf8IOレイヤーが削除されるのはなぜですか?

  11. 11

    ドロップアウトレイヤーがケラでトレーニング可能であるとはどういう意味ですか?

  12. 12

    なぜプレイヤーはその位置を動かした後に倒れるのですか?

  13. 13

    tensorflowレイヤーとkerasSimpleRNNレイヤーにtanhのデフォルトのアクティベーションがあるのはなぜですか

  14. 14

    Androidでスプラッシュスクリーンのレイヤーリストを拡張するときにエラーが発生するのはなぜですか

  15. 15

    スケルトンがプレイヤーにダメージを与えないのはなぜですか?

  16. 16

    CNNで完全に接続されたレイヤーを「トップレイヤー」と呼ぶのはなぜですか?

  17. 17

    スプライトがタスクを終了したときに、スプライトがスプライトの所有者(レイヤー)を呼び出してスプライトを削除するようにするにはどうすればよいですか?

  18. 18

    プレイヤーが近接プロンプトと対話するとき、プレイヤーがツールを持っているかどうかをチェックし、持っていない場合は、機能を実行します-ROBLOX STUDIO

  19. 19

    プレーヤークラスで、プレーヤーの子としてヒットボックススプライトを作成しました。gamesceneのdidBeginメソッドでそのヒットボックススプライトにアクセスするにはどうすればよいですか?

  20. 20

    VLCプレーヤーが.apeファイルをすべて1つの曲として再生するのはなぜですか?

  21. 21

    Flashプレーヤーで音楽を再生するときにChromeが不具合するのはなぜですか?

  22. 22

    JavaFXとスプライトアニメーション、プレーヤースプライトの画像を変更するアニメーションサイクルを作成するにはどうすればよいですか?

  23. 23

    Windowsは、どのネットワークアダプタがワイヤレスデバイスであるかをどのように認識しますか?

  24. 24

    タグに評価を書き込むことができる音楽プレーヤーはどれですか、または:再インストール時に曲の評価が失われないようにするにはどうすればよいですか?

  25. 25

    UNIX OSにGUIレイヤーがあるのか、それともコマンドラインのみなのかをJavaアプリケーションで知るにはどうすればよいですか?

  26. 26

    ssdとyoloにroiプーリングレイヤーがないのはなぜですか?

  27. 27

    どの音楽プレーヤーがタグに評価を書き込むことができますか、または:再インストール時に曲の評価を失わないようにするにはどうすればよいですか?

  28. 28

    どの音楽プレーヤーがタグに評価を書き込むことができますか、または:再インストール時に曲の評価を失わないようにするにはどうすればよいですか?

  29. 29

    プレイヤーを動かすと敵の動きが止まります

ホットタグ

アーカイブ