回転する円盤
表示画面を高速で書き換えると、運動しているように見える。
図1に示す図は、回転している円盤の画像を2枚並べたものである。
図1
図2の画像は、リスト1のスクリプトで描いている。
リスト1では、描画用スクリーンを次のコードで用意している。
screen = pg.display.set_mode((500, 500))
スクリーンを次のコード
screen.fill((255,255,255))
で白で塗りつぶした後、回転した円盤を楕円として次のコードで描いている。
pg.draw.ellipse(screen, f_color(ck_c), pg.Rect((250-v_w,100),(2*v_w,300)))
スクリーンの描画後、次のスクリプトで、画面の更新が0.02秒間隔になるように調整している。
while time.perf_counter()
< ck_t: # 画面の更新の時間調整
pass
pg.display.flip()
# 画面の更新
ck_t = time.perf_counter()
+ 0.02 # 次の更新は0.02秒後
使用パソコンのディスプレイのリフレッシュレートは60Hzである。
イベントのチェックは、次のスクリプトで行っている。
for e in pg.event.get():
# イベントの取得
if e.type
== pg.QUIT:
# Windowのクローズボンタが押されたか
ck = False
elif
e.type == pg.KEYDOWN: # 押されたキーがあるか
if e.key == pg.K_c: # 押されたキーはキーCか
ck_c *= -1
elif e.key == pg.K_ESCAPE: # 押されたキーはESCキーか
ck = False
キーCを押すと、円盤の色が変わる。
描画画面の右上角のクローズボタンをクリックするか、ESCキーを押すとプ、ckがFalseに設定されて、while文が終了する。
リスト1 スクリプトファイルは圧縮ファイルrot_disc_files.zipとした。
import pygame
as pg
import time
import math
pg.init() # pygameの初期化
screen = pg.display.set_mode((500,
500))
# 描画スクリーンの設定
pg.display.set_caption('Rotating Disc')
ck_t = 0.0 # 描画時間間隔の調整用
i_rot = 0
# 円盤の回転角
ck_c = 1
# 色の選択用変数
ck = True
# while文の制御用
while ck:
screen.fill((255,255,255))
# スクリーンを色(r,g,b)で塗り潰す
v_w
= 150 * math.cos(i_rot)
# 円盤の回転角
def
f_color(c): # 色の選択用関数
if c
> 0:
return (0,255,0)
else:
return (0,0,255)
# 円盤の描画
pg.draw.ellipse(screen,
f_color(ck_c), pg.Rect((250-v_w,100),(2*v_w,300)))
i_rot
+= math.pi/100 # 回転角の更新
if i_rot
> math.pi/2: # 回転角のチェック
ck_c *= -1
# 色を変える
i_rot -= math.pi # 回転角の調整
while time.perf_counter()
< ck_t: # 画面の更新の時間調整
pass
pg.display.flip()
# 画面の更新
ck_t
= time.perf_counter() + 0.02 # 次の更新は0.02秒後
for e in pg.event.get():
# イベントの取得
if e.type == pg.QUIT:
# Windowのクローズボンタが押されたか
ck = False
elif e.type == pg.KEYDOWN: # 押されたキーがあるか
if e.key == pg.K_c: # 押されたキーはキーCか
ck_c *= -1
elif e.key == pg.K_ESCAPE:
# 押されたキーはESCキーか
ck = False
pg.quit() # pygameの終了