4-7 Pygameのマウス入力
同人誌について
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで288ページの本になります。ぜひ、こちらもご購入ください(2024-03-10:ver1.0.3 に更新)。
マウス入力の例
マウス入力の例を示します。
マウス入力には、「マウスを操作した瞬間」を検出する方法と、「マウスの現在の状態」を検出する方法の2種類があります。前者は、ボタンのクリックなどの操作に向いています。後者は、キャラクターの移動などに向いています。
「example_pygame/mouse.py」を示します。
import pygame
def main():
pygame.init() # Pygameを初期化
screen = pygame.display.set_mode((800, 600)) # 画面作成
image = pygame.image.load("image/icon.png") # 画像
running = True # 実行継続フラグ
while running:
pygame.display.update() # 画面を更新
screen.fill(pygame.Color(0, 0, 0)) # 画面を塗りつぶす
# イベント発生時取得
for event in pygame.event.get(): # イベント
if event.type == pygame.QUIT: running = False # 終了
if event.type == pygame.MOUSEBUTTONDOWN: # ボタン下げ
if event.button == pygame.BUTTON_LEFT: # 左ボタン
print(event.pos, "DOWN")
if event.type == pygame.MOUSEBUTTONUP: # ボタン上げ
if event.button == pygame.BUTTON_LEFT: # 左ボタン
print(event.pos, "UP")
if event.type == pygame.MOUSEMOTION: # マウス移動
print(event.pos)
# 状態取得
pressed = pygame.mouse.get_pressed()
if pressed[0]: # 左クリック
image.set_alpha(128) # 半透明
else:
image.set_alpha(255) # 不透明
screen.blit(image, pygame.mouse.get_pos()) # 描画
pygame.display.flip() # 画面フリップ
pygame.quit()
if __name__ == "__main__":
main()
まずは『Pygame』の初期化処理です。
import pygame
def main():
pygame.init() # Pygameを初期化
screen = pygame.display.set_mode((800, 600)) # 画面作成
image = pygame.image.load("image/icon.png") # 画像
running = True # 実行継続フラグ
メイン ループの中で、キー入力の判定をおこないます。ここでは、マウスを操作した瞬間の検出を示します。
while running:
pygame.display.update() # 画面を更新
screen.fill(pygame.Color(0, 0, 0)) # 画面を塗りつぶす
# イベント発生時取得
for event in pygame.event.get(): # イベント
if event.type == pygame.QUIT: running = False # 終了
if event.type == pygame.MOUSEBUTTONDOWN: # ボタン下げ
if event.button == pygame.BUTTON_LEFT: # 左ボタン
print(event.pos, "DOWN")
if event.type == pygame.MOUSEBUTTONUP: # ボタン上げ
if event.button == pygame.BUTTON_LEFT: # 左ボタン
print(event.pos, "UP")
if event.type == pygame.MOUSEMOTION: # マウス移動
print(event.pos)
`event.type`が`pygame.MOUSEBUTTON~`のときに、マウスのボタンの状態を確認できます。また、`pygame.MOUSEMOTION`のときに、マウスの移動を確認できます。
続いて、マウスの現在の状態の検出を示します。
# 状態取得
pressed = pygame.mouse.get_pressed()
if pressed[0]: # 左クリック
image.set_alpha(128) # 半透明
else:
image.set_alpha(255) # 不透明
screen.blit(image, pygame.mouse.get_pos()) # 描画
pygame.display.flip() # 画面フリップ
pygame.quit()
`pygame.mouse.get_pressed()`関数の戻り値を利用します。
これらの処理を、より詳しく見ていきましょう。
操作した瞬間を検出する方法
`pygame.event.get()`を使います。そして`for in`文で`event`を得ます。
for event in pygame.event.get(): # イベント
if event.type == pygame.QUIT: running = False # 終了
if event.type == pygame.MOUSEBUTTONDOWN: # ボタン下げ
if event.button == pygame.BUTTON_LEFT: # 左ボタン
print(event.pos, "DOWN")
if event.type == pygame.MOUSEBUTTONUP: # ボタン上げ
if event.button == pygame.BUTTON_LEFT: # 左ボタン
print(event.pos, "UP")
if event.type == pygame.MOUSEMOTION: # マウス移動
print(event.pos)
`event`にはさまざまな情報が含まれています。そして、`event.type`が`pygame.MOUSE~`のときにマウスが操作されています。
ボタン操作時は`event.button`の値を調べると、操作が発生したボタンが分かります。ボタンの種類は`pygame.BUTTON_~`の形式です。また、`event.pos`でマウス カーソルの位置を得られます。
現在の状態を検出する方法
`pygame.mouse.get_pressed()`を使います。
pressed = pygame.mouse.get_pressed()
if pressed[0]: # 左クリック
image.set_alpha(128) # 半透明
else:
image.set_alpha(255) # 不透明
screen.blit(image, pygame.mouse.get_pos()) # 描画
`pygame.mouse.get_pressed()`の戻り値は、真偽値のリストです。要素0がボタン1、要素1がボタン2……です。マウス カーソルの位置は`pygame.mouse.get_pos()`で得られます。
同人誌について
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで288ページの本になります。ぜひ、こちらもご購入ください(2024-03-10:ver1.0.3 に更新)。
このnoteの記事と、Webページに一部抜粋版を掲載しています。
技術系同人誌など まとめページ