6.wait
ここでPyGameを使って、Lチカならぬ画像チカをやってみましょう。
二つの画像を用意して…マイコンのLチカのようにちかちかと光らせてみます。
glaydot.png
bluedot.png
使うのはこの二つの画像。
交互に同じ場所に表示することで光ってる演出をしましょうというものです。
ソースコードはこんな感じ。
import pygame from pygame.locals import * #--------------------------------------------- # function start #--------------------------------------------- def pollingEvent(): global _running for event in pygame.event.get(): if event.type == pygame.QUIT: _running = False def blink( value ): global screen, img1, img2 screen.fill( (50,50,50) ) if( value == 1 ): screen.blit(img1,(144,83)) else: screen.blit(img2,(144,83)) pygame.display.update() #--------------------------------------------- # function end #--------------------------------------------- _running = True _size = ( 320,200 ) _mode = pygame.HWSURFACE | pygame.DOUBLEBUF pygame.init() screen = pygame.display.set_mode(_size,_mode) pygame.display.set_caption("hello pygame") img1 = pygame.image.load("./bluedot.png").convert_alpha() img2 = pygame.image.load("./glaydot.png").convert_alpha() while(_running): pollingEvent() blink(1) pygame.time.wait(100) blink(0) pygame.time.wait(100) pygame.quit()
画像を二つ読み込んで、表示のためのファンクション、blinkを呼び出し…
100m秒まつ。 Arduinoのサンプルプログラムで見るような、あんな感じのものそのものですね。
今回の注目点は time.wait() というファンクションです。
ArduinoでいえばDelay、mbedでいえばwait とほとんど変わりません。
…実はこのプログラムには大きな問題があるのです。
マイコンなどのプログラムでは終了するという概念がありませんから問題にならない部分ですが、コンピュータ上でのプログラムというのは開始して処理して、そして終了するという流れがほぼ必須になります。
問題というのは、このプログラムの場合200m秒ごとにしか終了の処理を受付ないことに在ります。
終了の処理以外でも、たとえばここに他のイベントを追加した場合、それは200m秒ごとにしか受け付けられないわけです。
待ち時間を儲けるのは必要になりますが、その間もイベントは監視しなくてはいけません。
というところで今回は問題を残しつつここまで。