0
0

pygameの簡単なコードなのになぜか重いのは、イベント処理の不足が原因の可能性

Posted at

要約

簡単なテストコードでも重くフリーズしたようになるが、イベントハンドリングを行っていないからかもしれない。

コード

import pygame

# 初期化
pygame.init()

# 定数
WIDTH, HEIGHT = 800, 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)

# ウィンドウの設定
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Game Template3")

# フレーム数
clock = pygame.time.Clock()
# フレームレートの上限設定
fps_limit = 30

# ゲームループ
running = True

# 再描画対象のrectリスト
dirty_rects = []

pygame.display.flip()

while running:
    clock.tick()
    dirty_rects = []

    # ★ここがないと固まった。
    # for event in pygame.event.get():
    #     if event.type == pygame.QUIT:
    #         running = False

    # 塗りつぶし
    screen.fill(BLACK)

    # 青い四角形の描画
    rect_square = pygame.draw.rect(screen, BLUE, (100, 100, 100, 100))

    #dirty rectのリスト作成
    dirty_rects.append(rect_square)
    pygame.display.update(dirty_rects)


    # フレームレートを制限
    clock.tick(fps_limit)

# Pygameを終了
pygame.quit()

ドキュメントにも書いてありました

Not handling events may cause your system to decide your program has locked up.

でも、「イベントキューにたまり過ぎたら古いものからドロップするよ」とも書いてあるので、普通に動いてほしくはあります。

The event queue has an upper limit on the number of events it can hold. When the queue becomes full new events are quietly dropped.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0