概要
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 | 毎フレームの画面クリアに使用 |

