マウスイベント1
マウスという入力インターフェースを用いて, クリック時のプリントの実装します.
Pygameでマウス入力を検出する方法は, 2つあります.
今回は1つ目のイベントハンドラでマウスイベントを補足する方法です.
イベントハンドラは今までQUITイベントで使っていました.
つまりクリック時の処理の設定です.
import pygame from pygame.locals import * import sys SCREEN_SIZE = (1000, 700) pygame.init() screen = pygame.display.set_mode(SCREEN_SIZE) pygame.display.set_caption("マウスイベント") backImg = pygame.image.load("hakusuiko.jpg").convert() pythonImg2 = pygame.image.load("kappa3.png").convert() colorkey = pythonImg2.get_at((0,0)) # 左上の色を透明色に pythonImg2.set_colorkey(colorkey, RLEACCEL) cur_pos = (500,350) # カッパの位置 pythons_pos = [] # コピーしたカッパのリスト while True: screen.blit(backImg, (0,0)) for event in pygame.event.get(): if event.type == QUIT: sys.exit() # マウスクリックでカッパをコピー if event.type == MOUSEBUTTONDOWN and event.button == 1: x, y = event.pos x -= pythonImg2.get_width() / 2 y -= pythonImg2.get_height() / 2 pythons_pos.append((x,y)) # カッパの位置を追加 # マウス移動でカッパを移動 if event.type == MOUSEMOTION: x, y = event.pos x -= pythonImg2.get_width() / 2 y -= pythonImg2.get_height() / 2 cur_pos = (x,y) # カッパを表示 screen.blit(pythonImg2, cur_pos) for i, j in pythons_pos: screen.blit(pythonImg2, (i,j)) pygame.display.update()
上の部分は今までと変わりません.
cur_pos = (500,350) # カッパの位置 pythons_pos = [] # コピーしたカッパのリスト
これで最初のカッパの位置と, マウスイベントを起こした時のカッパの位置の登録を行います.
これからクリック時の挙動イベントハンドラのプログラムです.
イベントハンドラは今まで, QUITイベントが来た時にスクリプトを終了していただけですが, 他にもたくさんのことに応用できます.
イベントには3種類あります.
一つ目に MOUSEBUTTONDOWN です.
マウスが押された時に一回だけ発生します. 長押ししても一回しか発生しません.
二つ目に MOUSEBUTTONUP です.
これはマウスが押されて離れた時に一回だけ発生します.
最後に MOUSEMOTION です.
マウスカーソルを移動させた時に発生します.
前の2つのイベントよりも大量に発生させることができます.
実際に見てみます.
for event in pygame.event.get(): if event.type == QUIT: sys.exit() # マウスクリックでカッパをコピー if event.type == MOUSEBUTTONDOWN and event.button == 1: x, y = event.pos x -= pythonImg2.get_width() / 2 y -= pythonImg2.get_height() / 2 pythons_pos.append((x,y)) # カッパの位置を追加 # マウス移動でカッパを移動 if event.type == MOUSEMOTION: x, y = event.pos x -= pythonImg2.get_width() / 2 y -= pythonImg2.get_height() / 2 cur_pos = (x,y)
まず最初はQUITの操作です.
QUITが押されたら終了. これは前と変わりません.
次に, MOUSEBUTTONDOWN なのでクリック時に発生します.
どのイベントが発生したのかはEventオブジェクトのtypeで判断できます
またボタンの種類なのですが今回は1となっています.
数字はマウスのボタンの箇所を表していて, 1は左クリック,2は中クリック, 3は右クリックを表します.
posはマウスイベントが発生した座標です.
位置の追加をしていくことによって, 一番下のプログラムで位置に沿って表示させます.
次は MOUSEMOTION なので, 矢印ポインタに合わせて設定したキャラクターが映っています.
最後に表示させるプログラムです.
screen.blit(pythonImg2, cur_pos) for i, j in pythons_pos: screen.blit(pythonImg2, (i,j)) pygame.display.update()
カッパの位置に沿って画像を貼っていきます.
最後にウィンドウの更新をします.