Up

回転する円盤

 

表示画面を高速で書き換えると、運動しているように見える。

図1に示す図は、回転している円盤の画像を2枚並べたものである。

 

図1

 

図2の画像は、リストのスクリプトで描いている。

リスト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キーを押すとプ、ckFalseに設定されて、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の終了

 

 

 

Home