質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

940閲覧

2つの画像が同時に動くようにしたいのですが、片方の画像の処理が止まってしまいます

Ritsuki

総合スコア3

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/28 11:32

python初心者です。pygameを使って主人公(ケン)が矢印キーで動くようにしています。また、それと同時に3種類の色のミカンが左から右に移動するようにしたいです。今は、試験的に青色のミカンのみ動かしています。

発生している問題・エラーメッセージ

エラーメッセージは出ません。ですが、青色のミカンが途中で止まってしまいます。止まってしまった後は、キーを押したときだけ動きます。

該当のソースコード

python

1import pygame 2import sys 3import random 4from pygame.constants import K_DOWN, K_LEFT, K_RIGHT, K_UP, KEYDOWN, QUIT 5 6 7pygame.init() # pygameの初期化 8pygame.key.set_repeat(550, 550) 9screen = pygame.display.set_mode((1920, 1030)) # 画面を生成 10pygame.display.set_caption("color_tag") # タイトルバー 11 12 13# 画像ファイルを読み込む_back_top = pygame.image.load("image\ken\ken bs.png") # 後ろ 前 14ken_back_right = pygame.image.load("image\ken\ken brf.png") # 後ろ 右 15ken_back_left = pygame.image.load("image\ken\ken blf.png") # 後ろ 左 16ken_front_top = pygame.image.load("image\ken\ken fs.png") # 正面 前 17ken_front_right = pygame.image.load("image\ken\ken frf.png") # 正面 右 18ken_front_left = pygame.image.load("image\ken\ken flf.png") # 正面 左 19ken_right_top = pygame.image.load("image\ken\ken rs.png") # 右 前 20ken_right_right = pygame.image.load("image\ken\ken rrf.png") # 右 右 21ken_right_left = pygame.image.load("image\ken\ken rlf.png") # 右 左 22ken_left_top = pygame.image.load("image\ken\ken ls.png") # 左 前 23ken_left_right = pygame.image.load("image\ken\ken lrf.png") # 左 右 24ken_left_left = pygame.image.load("image\ken\ken llf.png") # 左 左 25shadow = pygame.image.load("image\ken\shadow.png") # 影 26 27# 鬼の画像ファイルを読み込む 28blue_tag = pygame.image.load("image\demon\Blue_tag.png") # 青色のみかん 29red_tag = pygame.image.load("image\demon\Red_tag.png") # 赤色のみかん 30yellow_tag = pygame.image.load("image\demon\Yellow_tag.png") # 黄色のみかん 31 32 33x = 800 # ケンの画像のx座標 34y = 400 # ケンの画像のy座標 35image = ken_front_top # 表示する画像 36 37blue_x = 10 # 青色の画像のx座標 38blue_y = 400 # 青色の画像のy座標 39 40yellow_x = 600 # 黄色の画像のx座標 41yellow_y = 400 # 黄色の画像のy座標 42 43red_x = 900 # 赤色の画像のx座標 44red_y = 400 # 赤色の画像のy座標 45 46number = random.randint(1, 6) 47 48screen.fill((0, 0, 0)) 49screen.blit(shadow, (x, y)) # 影の画像を表示 50screen.blit(image, (x, y)) # 正面の画像を表示 51screen.blit(blue_tag, (blue_x, blue_y)) # 青色のみかんを表示 52screen.blit(yellow_tag, (yellow_x, yellow_y)) # 黄色のみかんを表示 53screen.blit(red_tag, (red_x, red_y)) # 赤色のみかんを表示 54 55pygame.display.update() # 画面を更新 56 57 58def update(): # 画像を表示する関数 59 60 global blue_x 61 62 screen.fill((0, 0, 0)) 63 64 # 表示する画像 65 screen.blit(shadow, (x, y)) # ケンの影を表示 66 screen.blit(image, (x, y)) # ケンの画像を表示 67 68 blue_x += 10 69 70 screen.blit(blue_tag, (blue_x, blue_y)) # 青色のみかんを表示 71 screen.blit(yellow_tag, (yellow_x, yellow_y)) # 黄色のみかんを表示 72 screen.blit(red_tag, (red_x, red_y)) # 赤色のみかんを表示 73 74 pygame.display.update() 75 pygame.time.wait(120) 76 77 78while True: # ループ処理 79 #pressed_key = pygame.key.get_pressed() 80 81 for event in pygame.event.get(): 82 if event.type == QUIT: # 終了イベント 83 pygame.quit() 84 sys.exit() 85 86 if event.type == KEYDOWN: 87 # 上キーが押された時の処理 88 if event.key == K_UP: 89 image = ken_back_right 90 y -= 30 91 update() 92 93 image = ken_back_top 94 y -= 30 95 update() 96 97 image = ken_back_left 98 y -= 30 99 update() 100 101 image = ken_back_top 102 y -= 30 103 update() 104 105 # 下キーが押された時の処理 106 if event.key == K_DOWN: 107 image = ken_front_right 108 y += 30 109 update() 110 111 image = ken_front_top 112 y += 30 113 update() 114 115 image = ken_front_left 116 y += 30 117 update() 118 119 image = ken_front_top 120 y += 30 121 update() 122 123 # 右キーが押された時の処理 124 if event.key == K_RIGHT: 125 image = ken_right_right 126 x += 30 127 update() 128 129 image = ken_right_top 130 x += 30 131 update() 132 133 image = ken_right_left 134 x += 30 135 update() 136 137 image = ken_right_top 138 x += 30 139 update() 140 141 # 左キーが押された時の処理 142 if event.key == K_LEFT: 143 image = ken_left_right 144 x -= 30 145 update() 146 147 image = ken_left_top 148 x -= 30 149 update() 150 151 image = ken_left_left 152 x -= 30 153 update() 154 155 image = ken_left_top 156 x -= 30 157 update() 158 159 else: 160 update()

試したこと

青色のミカンの位置を変更する変数がうまく動いていないのかと思い、print関数を使って変数の値を表示してみました。みかんが動かなくなると同時に変数も更新されなくなってしまっています。
また、pygame.event.clear()を使って入力内容を削除してみたのですが、処理が重くなってしまいました。

補足情報(FW/ツールのバージョンなど)

pythonのバージョン:python3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2021/12/28 12:56

for event in pygame.event.get(): の部分でイベントの発生待ちになります。なので、キー入力だけでなく、マウスクリックやウィンドウ上でマウスカーソルを動かしたり、フォーカスアウト・フォーカスインなどでも青いミカンが動くことになります。イベントの発生如何に関わらず、常に動かし続けたいという事でしょうか?
Ritsuki

2021/12/28 13:38

説明が足りず申し訳ありません。おっしゃるとおりイベントの発生に関わらず常に動かし続けたいです。 また、試してみたところマウスカーソルを動かしても動きが止まりませんでした。
melian

2021/12/28 13:45

はい、現状のコードでは動きは止まりません。常に動かしたいのであれば、for event in pygame.event.get(): と最後の else: update() のインデントを同じ高さにしてください。現状では最後の else 節のインデントが一段階内側へ入ってしまっているので何らかのイベントが発生しないと動き出しません。 for event in pygame.event.get(): : else: update()
Ritsuki

2021/12/28 14:02

直りました!ありがとうございます!
melian

2021/12/28 14:09

良かったです。簡単でよいので解決した旨を回答として投稿して下さい(ご自身の回答をベストアンサーにできます)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問