この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、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
文で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で290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)