5.event

画像は表示できましたが、表示するだけではあまり意味がありません。

ツールをつくるにしても、ゲームをつくるにしても、大切なのはユーザーの起こしたアクションを読み取って何かしらのリアクションを返せるようにすること…。

それがイベント処理です。

実は最初からコードに入ってましたよね。

ウィンドウの閉じるボタンでウィンドウが閉じてソフトが終了する。 というのも立派なイベント処理なのです。

どういうイベントがあるのか見てみましょう。

QUIT none ACTIVEEVENT gain, state KEYDOWN unicode, key, mod KEYUP key, mod MOUSEMOTION pos, rel, buttons MOUSEBUTTONUP pos, button MOUSEBUTTONDOWN pos, button JOYAXISMOTION joy, axis, value JOYBALLMOTION joy, ball, rel JOYHATMOTION joy, hat, value JOYBUTTONUP joy, button JOYBUTTONDOWN joy, button VIDEORESIZE size, w, h VIDEOEXPOSE none USEREVENT code

こんな具合にいろいろあります。左のがイベントType、右のがイベント発生したときに取得できる値です。

ためしにマウスのボタンがクリックされたときに位置を取得してみます。

前のステップで使ったスクリプトの pollingEventにマウスのボタン処理を追加してみます。

def pollingEvent(): for event in pygame.event.get(): if event.type == pygame.QUIT: _running = False if event.type == pygame.MOUSEBUTTONDOWN: position = event.pos button = event.button print(position, button)

これでスクリプトを実行して適当なところでクリックすると座標と、どのボタンが押されたのかターミナルに数字が表示されますね? 他のイベントも大体使い方は一緒です。

では、前のステップのスクリプトに手を加えてクリックした位置にアイコンが表示されるようにしてみましょう。

キモは、globalの使い方くらいでしょうか。

画面の更新をするための update というファンクションも追加になっています。

import pygame from pygame.locals import * #--------------------------------------------- # function start #--------------------------------------------- def pollingEvent(): global _running,position for event in pygame.event.get(): if event.type == pygame.QUIT: _running = False if event.type == pygame.MOUSEBUTTONDOWN: position = event.pos button = event.button update() print(position, button)def update(): global screen,position screen.blit(img,position) 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") imgPath="/usr/share/raspberrypi-artwork/launch.png" img = pygame.image.load(imgPath).convert_alpha() while(_running): pollingEvent() pygame.quit()

すこしづつ長くなってきましたね。

でも、ほら、いままでやってきたことしかやっていないから よく見るとなにも難しいことしてないでしょ?

実行結果はこんな感じになります。