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

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

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

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

Python

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

Q&A

解決済

1回答

409閲覧

Pygameで画像を動かしたい

KYNA

総合スコア1

Pygame

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

Python

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

0グッド

0クリップ

投稿2023/07/10 03:21

編集2023/07/12 03:10

実現したいこと

画像を3つ読み込んでおり、それらを上下左右・スペースキーで動かしたいです

前提

Pygameを独学中です。
ネットやテキストからのいろんなサンプルコードを
自分なりに書き直したりして学習をしています。

今回はもともとはmainループに入っていたコードを
def move_charaとして関数にしようともくろんでいます。

画像の表示はできましたがキーを押しても動かないので
どこが間違っているかご指摘いただけるとありがたいです。

どうぞよろしくお願いします。

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

エラーメッセージは表示されません。

該当のソースコード

import pygame from pygame.locals import * import sys #画像の読み込み im_1 = pygame.image.load('resize_cat_exotic_shorthair.png') im_2 = pygame.image.load("re_cheshire_neko.png") im_3 = pygame.image.load("re_mouse.png") #各種初期値を設定 flg_turn = False last_key = pygame.K_LEFT jump_status = 0 jump_timer = 0 jump_up = 0 #固定値を設定 SURFACE_WIDTH = 1200 SURFACE_HEIGHT = 676 def chara_move(key): global last_key, flg_turn, jump_status, jump_up if key[pygame.K_LEFT] == 1: px -= 20 if px <0: px = 1200 if last_key == pygame.K_RIGHT: flg_turn =True last_key = pygame.K_LEFT if key[pygame.K_RIGHT] == 1: px += 20 if px > 1200: px = 0 if last_key == pygame.K_LEFT: flg_turn = True last_key = pygame.K_RIGHT if kye[pygame.K_DOWN] == 1: py += 20 if py > 676: py = 0 if last_key == pygame.K_SPACE: flg_turn = True last_key = pygame.K_DOWN if key[pygame.K_SPACE] and jump_status < 2: jump_status = 1 jump_up += 2 if jump_up < 16: jump_up = 16 elif jump_up > 36: jump_up = 36 if key[pygame.K_SPACE] == 0 and jump_status == 1: jump_status = 2 if jump_status == 2: py -= jump_up jump_up -= 1 if py > 500: py = 500 jump_status = 0 if jump_status == 0: surface.blit(im_1, (px, py)) elif jump_status == 1: surface.blit(im_2, (px, py)) elif jump_status == 2: surface.blit(im_3, (px, py)) def main(): global im_1, im_2, im_3, flg_turn pygame.init() pygame.display.set_caption("画像表示と動き") pygame.display.set_mode((SURFACE_WIDTH, SURFACE_HEIGHT), 0, 32) surface = pygame.display.get_surface() clock = pygame.time.Clock() while(1): for event in pygame.event.get(): if event.type ==QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() pygame.display.update() surface.fill((224,255,255)) rect_1 = im_1.get_rect() rect_2 = im_2.get_rect() rect_3 = im_3.get_rect() surface.blit(im_1, (SURFACE_WIDTH / 4, SURFACE_HEIGHT / 2)) surface.blit(im_2, (SURFACE_WIDTH / 2, SURFACE_HEIGHT / 2)) surface.blit(im_3, (SURFACE_WIDTH / 3, SURFACE_HEIGHT / 8)) if flg_turn == True: im_1 = pygame.transform.flip(im_1, True, False) elif flg_turn == True: im_2 = pygame.transform.flip(im_2, True, False) flg_turn = False elif flg_turn == True: im_3 == pygame.trasnform.flip(im_3, True, False) flg_turn = False pygame.display.update() clock.tick(10) if __name__ == "__main__": main()

試したこと

①元コードを参照
②似た挙動をするpygameコードを参照

mainループ内ではなくキャラ画像だけ動かす関数を使っているプログラムもあったので
そのほうが見やすいと思い、参照していた①を書き換える作業をしていますが行き詰りました

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

OS: Windows 10
Python : 3.10.5
IDLEを使って書いています

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

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

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

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

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

guest

回答1

0

ベストアンサー

もともとはmainループに入っていたコードを def move_charaとして関数にしようともくろんでいます。

この関数がchara_moveの間違えだとしても、その関数がどこにも呼ばれていないからでしょう。
少なくとも、その処理があった元の場所でその関数を呼ぶようにする必要があると思います。

投稿2023/07/10 04:55

TakaiY

総合スコア14307

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

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

KYNA

2023/07/10 08:11

TakaiY様 コメントありがとうございます。上記ご指摘ありがとうございます、はい関数名を書き間違えました。 mainループで関数を呼び出したところ挙動がおかしいですが、動くことには動きました! 理解しているようで全然理解してなかったな、と反省です。 変な動きはしていますが、どうして動かなかったかが分かったのでとてもすっきりしています。 ただ他にもまだ修正しなければいけない箇所が出てきたので、改めて見直すことにします。 お返事ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問