ながみえ
pygameを用いてゲームアプリを作成する手順を紹介するサイトの、マウスでキャラクターを動かす方法を紹介する記事のアイキャッチ画像

一つ前のページではキーボードでキャラクターを動かす方法について学習しました。

今回は マウスでキャラクターを動かす方法 について見ていきましょう。

Chapter1:pygame入門|画面を表示しよう
Chapter2:簡単なノベルゲームを作ろう
・Chapter2-1:キーボードでキャラクターを動かそう
・Chapter2-2:マウスでキャラクターを動かそう ◁今回はここ
・Chapter2-3:画面にボタンを表示しよう
・Chapter2-4:紙芝居を作ろう
・Chapter2-5:ノベルゲームを作ろう
Chapter3:簡単なアクションゲームを作ろう
Chapter4:ブロック崩しを作ろう
Chapter5:シューティングゲームを作ろう
Chapter6:pygameのお役立ち情報

ゲームではキャラクターを操作する手段として、キーボード以外にもマウスを使用することがよくあります。

例えば、マウスでキャラクターを好きな場所に移動させたり、クリックして特定の動作をさせたりすることが可能です。

今回の記事では、マウスを使ってキャラクターを動かす方法を学びます。具体的には、次のようなことを学びます。

  • マウスの入力を取得する方法
  • マウスの位置にキャラクターを移動させる方法
  • 左クリックと右クリックで異なる動作をさせる方法

これらの基本を理解すると、ドラッグ&ドロップやクリックでキャラクターを操作するゲームが作れるようになります。

まずは、pygameにおけるマウス入力の基本から見ていきましょう!

<<前のページ

pygameの記事一覧

Pythonのゲームライブラリ pygame を使ってゲームアプリを制作するページのアイキャッチ画像

次のページ>>

マウス入力の基本を理解しよう

マウスを使ってキャラクターを動かすためには、pygameでマウスの入力を取得する方法を理解する必要があります。

pygameでは、以下の二つの状態を取得することができます。

  • マウスのボタンがクリックされたか
  • マウスのカーソルがどこにいるか(座標)
【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

クリック状態を取得しよう

マウスのボタンが押されているかどうかを確認するには、pygame.mouse.get_pressed() を使用します。

(一つ前のChapterで学習した pygame.key.get_pressed と似ていますね)

この関数はマウスのボタンの押下状態をリストで返します。

mdown = pygame.mouse.get_pressed()
# get_pressedメソッドにて「今押されているボタン」を取得して変数mdownに代入

この mdown には、以下の3つの値が格納されます。

インデックスボタン
mdown[0]左クリック
mdown[1]中クリック(ホイール)
mdown[2]右クリック

例えば左クリックが押されているかどうかを確認するには、次のように条件分岐を行います。

if mdown[0]:  # 左クリックが押されている
    print("左クリックが押されました!")

カーソル座標を取得しよう

マウスカーソルの現在の位置を取得するには、pygame.mouse.get_pos() を使用します。

この関数は、マウスの現在位置 (x, y) のタプルを返します。

(mx, my) = pygame.mouse.get_pos()
print(f"マウスの位置: {mx}, {my}")

例えば、ゲームの中でマウスの位置にキャラクターを表示したい場合は、blit() 関数を使ってキャラクター画像を描画することができます。

screen.blit(inu, (mx, my))
参考資料

タプルとは複数の要素を格納できるなデータ構造です。

()で定義し、リストと異なり要素の追加・削除・変更ができません。

詳しくは↓↓の記事を参考にしてください。

あわせて読みたい
Pythonデータ構造|タプルの基本操作をマスターしよう|splitとjoinの実例付き【レッスン4-9】
Pythonデータ構造|タプルの基本操作をマスターしよう|splitとjoinの実例付き【レッスン4-9】

マウスイベントをコードで処理する

pygame.mouse.get_pressed() は、ボタンが押されている間ずっと True を返しますが、一度だけクリックを検出したい場合は、pygame.event.get() を使います。

for event in pygame.event.get():
    if event.type == pygame.MOUSEBUTTONDOWN:  # マウスボタンが押された瞬間
        print("マウスがクリックされました!")
    elif event.type == pygame.MOUSEBUTTONUP:  # マウスボタンが離された瞬間
        print("マウスが離されました!")

マウス操作でキャラクターを動かそう

マウスの入力を取得する方法を学習しました。

ここからはその知識を活用して、マウスの位置にキャラクターを動かす方法を学びます。

マウスの位置に画像を表示する

マウスカーソルの現在位置を取得し、その位置に画像を描画することで、キャラクターをマウスの動きに合わせて表示できます。

次のコードではマウスの座標を取得し、その位置に犬の画像 (inu.png) を描画します。

↓↓の画像を使い、ぜひ画面上でマウスをクリックしたまま動かしてみてください。

# 初期化(ゲームの準備をする)
import pygame, sys
pygame.init()
screen = pygame.display.set_mode((800,600))
inu = pygame.image.load("inu.png")

# メインループ
while True:
    # 画面を初期化する
    screen.fill(pygame.Color("WHITE"))
    # ユーザー入力
    mdown = pygame.mouse.get_pressed()
    (mx, my) = pygame.mouse.get_pos()
    #画面を作る
    if mdown[0]:
        screen.blit(inu, (mx-100, my-100))
    if mdown[2]:
        pygame.draw.rect(screen, pygame.Color("RED"),(mx, my, 100, 100))
    #描写処理
    pygame.display.update()
    pygame.time.Clock().tick(60)
    # 終了処理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

まとめ

ここまで、pygameを使ってマウス操作でキャラクターを動かす方法を学んできました。

次の章ではマウスを使ってボタンを押す方法を学びます。

ボタンのクリック判定や、クリックした際の処理を実装し、さらにインタラクティブなゲームを作れるようになりましょう!

<<前のページ

pygameの記事一覧

Pythonのゲームライブラリ pygame を使ってゲームアプリを制作するページのアイキャッチ画像

次のページ>>

FAQ|マウス操作でキャラを動かす方法

Q
Q1. キャラクターがマウスカーソルの位置に追従しません。

pygame.mouse.get_pos()で取得した座標を正しく反映しているか確認してください。特に描画の直前に座標を更新することが重要です。

Q
Q2. マウスクリックの反応がない場合の原因は?

pygame.MOUSEBUTTONDOWNイベントが有効になっているか、またイベントループ内で正しく処理されているかを確認しましょう。

Q
Q3. マウスでキャラを滑らかに動かすにはどうすればいい?

線形補間(lerp)などの手法を使うと、座標を徐々に移動させて滑らかに見せることができます。一定速度で近づける処理が効果的です。

質問用コンタクトフォーム

この記事を書くにあたりAIを活用しています。

人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。

pygame記事一覧へ戻る
Python記事一覧へ戻る

記事URLをコピーしました