動き

【Pygame Zero】キャラクターが マウスに向かって動く

ratch2025
ラッチ先生
ラッチ先生
スック
スック

スックです。よろしくね!

今回のプロジェクトは、こちら!
ラッチ先生
ラッチ先生

今回のプロジェクトは、
基礎プログラムに 追加していきます。
下の「pygame zero」zipファイルを
ダウンロードしてください

pythonしよう!00:boonを表示する
pythonしよう!動き06:pygame zeroフォルダ
スック
スック

この基礎プログラムは、こちらの記事で解説しています

参考記事
【Pygame Zero】スクリーンに画像を 表示させる
【Pygame Zero】スクリーンに画像を 表示させる
コードを 書こう
boonボーンを マウスの方へ 向ける
マウスの方へ 動く
プログラムを 実行してみよう
ラッチ先生
ラッチ先生

boonボーンを マウスの方へ向けるためには、
マウスポインターの位置を 知る必要が あります。

そこで、onオン_mouseマウス_moveムーヴ()関数を 使います

def on_mouse_move()関数
pythonしよう!動き06:def on_mouse_move()関数の解説
ラッチ先生
ラッチ先生

そして、Actorアクター()クラスの
angleアングル_toトゥー()メゾットを 使って、boonボーンを マウスの方へ 向けるんだ

Actor()クラスとは?

7. boonボーン = Actorアクター(“boonボーン“, (400, 300))

変数boonボーンには、Actorアクター()クラス(設計図)が 入っています。

pythonしよう!動き06:boon = Actor("boon", (400, 300))の解説

Actorアクター()クラスに入っている
 ・ angleアングル(キャラクターの向き)
 ・ angleアングル_toトゥー(ターゲットの方へ向く角度を計算する)
 ・ moveムーヴ_towardsトゥワーズ(ターゲットの所へ 行く)
 ・ x (キャラクターの x座標)
 ・ y (キャラクターの y座標)
属性(データ)と メゾットを 「.(ドット)」を付けて 使います

Python
def on_mouse_move(pos):
    boon.angle = boon.angle_to(pos)
pythonしよう!動き06:bppn.angle = boon.angle_to(pos)の解説
angle_to()メゾット
pythonしよう!動き06:Actor()クラスのangle_to()メゾットの解説

boonボーン.angleアングル = boonボーン.angleアングル_toトゥー(posポス)

このプログラムについて 解説するね

まず、
boonボーン.angleアングル_toトゥー(posポス)

引数posポスには、マウスの位置が入っています

angleアングル_toトゥー(posポス)で、
マウスへの角度が 計算され ○度と答えが出る

pythonしよう!動き06:boon.angle_to(pos)の解説

boonボーン.angleアングル = ○度

計算された○度を
boonボーン.angleアングルboonアングルの向き)に代入(=)する
すると、

boonボーンは マウスの方を向く

pythonしよう!動き06:boonがマウスのposの方を向く解説
スック
スック

なるほど!
angleアングル_toトゥー()メゾットで計算された角度を
boonボーン.angleアングル に 代入されて ③ boonボーンが マウスの方を 向くのね

ラッチ先生
ラッチ先生

プログラミングの世界では、
「=」は、代入する。
つまり、
boonボーン.angleアングルに、「○度(データ)」を 代入する と言うこと
数学の「=(イコール)」と 違うからね

数学の「=(イコール)」は、
プログラミングの世界では、「==」と書きます
覚えておいてね!

それでは、
defデフ updateアップデート()関数を 使って
boonボーンを マウスの方へ 動かしましょう

ラッチ先生
ラッチ先生
def update()関数
pythonしよう!動き06:def update()関数の解説
スック
スック

あっ!ぼく、わかるよ
boonボーンを 動かうのに、moveムーヴ_forwardフォワード()メゾットを 使うんでしょ

Python
def update():
    boon.forward(5)
スック
スック

あれっ?
boonボーンが マウスポインターより 先に 行っちゃうよ…

defデフ updateアップデート()関数は、毎回更新されます。
moveムーヴ_forwardフォワード(5)メゾットだと、ずっと5pxずつ動き続けちゃうんだ

ラッチ先生
ラッチ先生
move_forawrd()メゾット
pythonしよう!動き06:Actorクラスのmove_forward()メゾットの解説
ラッチ先生
ラッチ先生

そこで、目的地へ行くメゾットが あるんだ!
moveムーヴ_towardsトゥワーズ()メゾットです

move_towards()メゾット
pythonしよう!動き06:Actor()クラスのmove_towards()メゾットの解説

moveムーブ_towardsトゥワーズ(到達地,スピード)メゾット の 到達地は マウスの座標です

defデフ onオン_mouseマウス_moveムーヴ(posポス)関数で
引数posポスの中に マウスの座標が 入っています

引数posポスmoveムーヴ_towardsトゥワーズ()メゾットの中に 入れて
 moveムーブ_towardsトゥワーズ(posポス, 5)とすると、 
エラーが出ます

defデフ onオン_mouseマウス_moveムーブ()関数の 引数posポス
 他の関数に使うことが できないためです。

pythonしよう!動き06:def on_mouse_move(pos) 引数posは他の関数には使えない

そこで、
変数mouseマウス_x と 変数mouseマウス_y を 作ります。

ラッチ先生
ラッチ先生
Python
mouse_x, mouse_y = 0, 0
pythonしよう!動き06:mouse_x, mouse_y = 0, 0の解説

次に、defデフ onオン_mouseマウス_moveムーブ(posポス)マウスの座標を 代入していきます

変数mouseマウス_x, mouseマウス_yの値は、
  マウスの新しい座標のデータに更新されていくために

Python
def on_mouse_move(pos):
    global mouse_x, mouse_y
    
    mouse_x, mouse_y = pos
pythonしよう!動き06:global mouse_x, mouse_y の解説
pythonしよう!動き06:mouse_x, mouse_y = pos の解説
スック
スック

なるほど!
これで、defデフ updateアップデート()関数にも
変数mouseマウス_x, mouseマウス_y にある データが、使えるんだね

そうです。
それでは、moveムーブ_towardsトゥワーズ()メゾットに
変数mouseマウス_x, mouseマウス_yを 入れてみよう

ラッチ先生
ラッチ先生
Python
def update():
    boon.move_towards((mouse_x, mouse_y), 5)
pythonしよう!動き06:boon.move_towards((mouse_x, mouse_y), 5)の解説
スック
スック

これで、今回の学習は終了! おつかれさま

今回は、
boonボーンが マウスの方へ動き続けるプログラムを 作りました

ラッチ先生
ラッチ先生
boonが マウスの方へ 動く
Python
import pgzrun
from pgzhelper import *

WIDTH = 800
HEIGHT = 590

boon = Actor("boon", (400, 300))

mouse_x, mouse_y = 0, 0

def draw():
    screen.fill("white")
    boon.draw()

def on_mouse_move(pos):
    global mouse_x, mouse_y
    
    mouse_x, mouse_y = pos
    boon.angle = boon.angle_to(pos)

def update():
    boon.move_towards((mouse_x, mouse_y), 5)
    
pgzrun.go()    
ラッチ先生
ラッチ先生

moveムーブ_towardsトゥワーズ()メゾットは、
ゲームを作る時 とても役に立つメゾットです
覚えておくと いいよ

スック
スック

はぁ~い!

ABOUT ME
ラッチ先生
ラッチ先生
こんにちは!
「Pythonしよう!楽しく学べるプログラミング教室」の学長、ラッチです。

scratchのように楽しく学べるPython講座です。
・図やアニメーションを使って、わかりやすく楽しく学べる!
・毎回の授業が新しい発見の連続!
・プログラミングの考え方が身につき、自分のやりたいことが形にできるように。

この3点をモットーにサイトを立ち上げました。 よろしくお願いします
記事URLをコピーしました