Pygame入門 — ウィンドウ表示とゲームループ

概要

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