●
前日譚: Python pygameをMacで使うのはヤメとこうぜ
前日譚では問題点がふたつあった。
- mp3が読めねー
- キー入力受け付けねー
●
# accept_mouse_click.py import pygame.locals as pgl def switch(event, left_click =pgl.K_z, scroll_click=pgl.K_c, right_click =pgl.K_x, scroll_up =pgl.K_UP, scroll_down =pgl.K_DOWN): '''マウスクリックをキー入力に変換します。 かえたいとこだけ指定してください。 ''' change_table = { 1: left_click, 2: scroll_click, 3: right_click, 4: scroll_up, 5: scroll_down, } if event.type != pgl.MOUSEBUTTONDOWN: return event if event.button not in change_table.keys(): print('<accept_mouse_click NOTICE> Unknown mouse click:' + str(event.button)) return event return DummyEvent(pgl.KEYDOWN, change_table[event.button]) class DummyEvent: '''eventのダミー。 オリジナルのeventがreadonlyだったため、ダミーを作ります。 ようはtypeの中にMOUSEBUTTONDOWN、keyの中にK_*が入ってりゃいいんだからさ! ''' def __init__(self, type_, key): self.type = type_ self.key = key |
for event in pygame.event.get(): # 左クリックをZキー、スクロールボタンをAキーに変換したい場合。 event = accept_mouse_click.switch( event, left_click=K_z, scroll_click=K_a ) if event.type == KEYDOWN: # 以下、キー入力を受け付けるスクリプト……。 |
●
今回のポイントは DummyEvent クラス。このモジュール、ようは event オブジェクトの中身を覗いてみて、マウスクリックだったらキー入力に入れ替えるってことをしてる。でも実は event オブジェクトの野郎が生意気にもreadonlyだったんだよな。だから書き換えられない。どうしたもんかと頭を捻ったのだが、こいつがどんな高度なクラスから生成されたオブジェクトだろうと、結局必要なのは type パラメータと key パラメータに定数が入ってるという事実だけなんだよな。であれば、そのふたつのパラメータをもったオブジェクトを自分で作っちまえばいいじゃんという流れで解決。やったー!