一つ前のページではキーボードでキャラクターを動かす方法について学習しました。
今回は マウスでキャラクターを動かす方法 について見ていきましょう。
Chapter1:pygame入門|画面を表示しよう
Chapter2:簡単なノベルゲームを作ろう
・Chapter2-1:キーボードでキャラクターを動かそう
・Chapter2-2:マウスでキャラクターを動かそう ◁今回はここ
・Chapter2-3:画面にボタンを表示しよう
・Chapter2-4:紙芝居を作ろう
・Chapter2-5:ノベルゲームを作ろう
Chapter3:簡単なアクションゲームを作ろう
Chapter4:ブロック崩しを作ろう
Chapter5:シューティングゲームを作ろう
Chapter6:pygameのお役立ち情報
ゲームではキャラクターを操作する手段として、キーボード以外にもマウスを使用することがよくあります。
例えば、マウスでキャラクターを好きな場所に移動させたり、クリックして特定の動作をさせたりすることが可能です。
今回の記事では、マウスを使ってキャラクターを動かす方法を学びます。具体的には、次のようなことを学びます。
- マウスの入力を取得する方法
- マウスの位置にキャラクターを移動させる方法
- 左クリックと右クリックで異なる動作をさせる方法
これらの基本を理解すると、ドラッグ&ドロップやクリックでキャラクターを操作するゲームが作れるようになります。
まずは、pygameにおけるマウス入力の基本から見ていきましょう!
マウス入力の基本を理解しよう
マウスを使ってキャラクターを動かすためには、pygameでマウスの入力を取得する方法を理解する必要があります。
pygameでは、以下の二つの状態を取得することができます。
- マウスのボタンがクリックされたか
- マウスのカーソルがどこにいるか(座標)
クリック状態を取得しよう
マウスのボタンが押されているかどうかを確認するには、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))
マウスイベントをコードで処理する
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を使ってマウス操作でキャラクターを動かす方法を学んできました。
次の章ではマウスを使ってボタンを押す方法を学びます。
ボタンのクリック判定や、クリックした際の処理を実装し、さらにインタラクティブなゲームを作れるようになりましょう!
FAQ|マウス操作でキャラを動かす方法
- Q1. キャラクターがマウスカーソルの位置に追従しません。
-
pygame.mouse.get_pos()
で取得した座標を正しく反映しているか確認してください。特に描画の直前に座標を更新することが重要です。
- Q2. マウスクリックの反応がない場合の原因は?
-
pygame.MOUSEBUTTONDOWN
イベントが有効になっているか、またイベントループ内で正しく処理されているかを確認しましょう。
- Q3. マウスでキャラを滑らかに動かすにはどうすればいい?
-
線形補間(lerp)などの手法を使うと、座標を徐々に移動させて滑らかに見せることができます。一定速度で近づける処理が効果的です。
質問用コンタクトフォーム
この記事を書くにあたりAIを活用しています。
人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。