PythonとPygameで作る レトロ風RPG 全コード

同人誌について

 この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。

 同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。

(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)


4-7 Pygameのマウス入力

公開:2024-03-07、更新:2024-03-10

マウス入力の例

 マウス入力の例を示します。

 マウス入力には、「マウスを操作した瞬間」を検出する方法と、「マウスの現在の状態」を検出する方法の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.typepygame.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.typepygame.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 に更新)

 技術系同人誌など まとめページ


トップページに戻る
Cronus Crown(クロノス・クラウン)のトップページに戻る
(c)2002-2024 Cronus Crown (c)1997-2024 Masakazu Yanai
ご意見・お問い合わせはサイト情報 弊社への連絡までお願いします
個人情報の取り扱い、利用者情報の外部送信について