概要
Pygame でまず学ぶべきは、ウィンドウを開いてゲームループ(メインループ)を回す基本です。
ここではウィンドウの作成、画面クリアと描画、フレームレート制御の基本パターンを確認します。
ウィンドウの作成
Pygame を初期化してウィンドウ(画面)を作成します。
set_mode でサイズを指定し、display.set_caption でタイトルを設定します。以下は最小構成の例です。
import pygame pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame Window Example") # 描画などの処理はここで行う pygame.quit()
ゲームループの構成
ゲームループは一般に「入力処理 → 更新 → 描画」の流れを繰り返します。
ループ内でイベントを処理し、画面をクリアしてから描画し、最後に画面を反映させます。
フレームレートは pygame.time.Clock で制御します。
import pygame import sys pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() running = True while running: # 入力処理 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 更新処理(ゲームロジックなど) # 描画処理 screen.fill((0, 0, 0)) # 黒で画面クリア # ここに描画コードを追加 pygame.display.flip() # 表示を更新 # フレームレート制御(例:60FPS) clock.tick(60) pygame.quit() sys.exit()
FPS と時間の扱い
フレームレートを一定に保つことで処理の安定性が向上します。
clock.tick() はループの最大フレームレートを指定し、戻り値や clock.get_time() で前フレームにかかった時間を取得できます。
時間差(デルタタイム)を使って速度を滑らかに扱うのが実務的です。
# デルタタイムの利用例 dt = clock.tick(60) / 1000.0 # 秒単位 x += vx * dt # フレームレートに依存しない移動
描画の基本
描画は画面を fill でクリアした後に行います。
図形は pygame.draw、画像は blit を使います。
描画順序は重なりに影響するため注意してください。
# 図形描画と画像描画の例 screen.fill((255, 255, 255)) pygame.draw.rect(screen, (255,0,0), (50, 50, 100, 80)) image = pygame.image.load("assets/player.png").convert_alpha() screen.blit(image, (200, 150))
注意点とベストプラクティス
ウィンドウ処理や描画は重い操作になりがちです。
毎フレームで重い計算や I/O を行わないこと、画像や音声は事前にロードして再利用すること、描画は画面更新の直前にまとめて行うことが基本です。
項目 | 補足 |
---|---|
Clock.tick | フレームレート上限の設定に使用(例:60) |
screen.fill | 毎フレームの画面クリアに使用 |