動き

【Pygame Zero】キャラクターを 左右キーで 回転させる

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

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

今回のプロジェクトは、こち
pythonしよう!00:boonを表示する
pythonしよう!動き09:pygame zeroフォルダ
スック
スック

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

参考記事
【Pygame Zero】スクリーンに画像を 表示させる
【Pygame Zero】スクリーンに画像を 表示させる
スポンサーリンク
コードを 書こう
boonを 左右キーで 左周り・右回りの回転をさせる
boonをクリックすると 止まる
2秒間 文字を表示させる
プログラムを 実行してみよう
ラッチ先生
ラッチ先生

今回のプロジェクトでは、
pgzhelperピージーゼット・ヘルパーモジュールに入っている関数は 使いません
削除しておきましょう

Python
import pgzrun
from pgzhelper import *  #削除する
ラッチ先生
ラッチ先生

それでは、boonボーンを動かすので
defデフ updateアップデート()関数を 使ってプログラムを 作りましょう

ラッチ先生
ラッチ先生

boonボーンの角度を 変えるには、
Actorアクター()クラスの 属性angleアングルを 使います

Actor()クラスとは?
pythonしよう!09:boon = Actor()の解説
Python
def update():
    boon.angle += 5
スック
スック

boonボーンの向きが、 5度ずつ増えるんだね

ラッチ先生
ラッチ先生

ちなみに、
boonボーンの向きを-5度ずつ増やしてみるよ

Python
def update():
    boon.angle += -5
スック
スック

「-5」にすると、
boonボーンは 反対に回りだすね

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

どういうこと…?

つまり、変数『rotateロテイト_directionディレクション』 の数字を「1」 か「-1」に変えるだけで
 boonボーンの向きを 変えることができるんだ

スック
スック

なるほど!
そういうことね

ラッチ先生
ラッチ先生

それでは、
boonボーン の 向きを決める
変数:rotateロテイト_directionディレクション を作りましょう

Python
rotate_direction = 1
ラッチ先生
ラッチ先生

つぎは、
boonボーン.angleアングル += 5 に、変数「rotateロテイト_directionディレクション」を かけよう

Python
def update():
    boon.angle += 5 * rotate_direction
スック
スック

おおっ!回ったぞ

ラッチ先生
ラッチ先生

そして、
defデフ onオン_keyキー_downダウン( )関数を使って
 ・ 右キーを押したら、
  変数:ratateロテイト_directionディレクションを 「-1 」にして
   右回りにする
 ・ 左キーを押したら、
   変数:ratateロテイト_direcitonディレクションを 「 1 」にして
   左回りにする
 プログラムを 作るよ

スック
スック

変数:rotateロテイト_directionディレクションは、
「1」か「-1」と データが変わるから、グローバル宣言するよ

Python
def on_key_down(key):
    global rotate_direction
ラッチ先生
ラッチ先生

右キーが押されると、「keysキーズ.RIGHTライト」が
引数keyキー に 入るよ

Python
    if key == keys.RIGHT:
        rotate_direction = -1
ラッチ先生
ラッチ先生

そして、
左キーが押されると、「keysキーズ.LEFTレフト」が
引数keyキー に 入るよ

Python
    if key == keys.LEFT:
        rotate_direction = 1
スック
スック

おおっ!
これで、左右キーでboonボーンの回転をコントロールできるね

ラッチ先生
ラッチ先生

onオン_mouseマウス_downダウン( ) 関数で
boonボーンをクリックしたら止めるプログラムを 作ります。

スック
スック

変数:rotate_direction のデータを変えるために
グローバル宣言を するよ

Python
def on_mouse_down(pos):
    global rotate_direction
ラッチ先生
ラッチ先生

onオン_mauseマウス_downダウン(posポス)関数で、
マウスでクリックした場所が 引数posポスの中に あります。

Actorアクター()クラスにあるcollidepointコライド・ポイント()メゾットを使うと
boonボーンに クリックしたか判定してくれるよ

cillidepoint( )メゾット
Python
    if boon.collidepoint(pos):
        rotate_direction = 0
スック
スック

なるほど!

ラッチ先生
ラッチ先生

最後に、boonボーンが止まったら、「stopストップ!」と 言わせます。
screenスクリーン.drawドローにあるtextテキストメゾットを 使います。

text( )メゾット
ラッチ先生
ラッチ先生

まずは、defデフ drawドロー()関数で「stopストップ!」を 表示しよう
この時に、
文字の
 ・大きさ
 ・場所
 ・色      を決めていこう

Python
    screen.draw.text("stop!", center=(400, 220), fontsize=70, color="red")
スック
スック

おっ!
boonボーンの上に「stopストップ!」が 表示されたぞ

ラッチ先生
ラッチ先生

stopストップ!」の場所が決まったら、「stopストップ!」を表示するスイッチ
変数:isイズ_textテキスト_showショー を作りましょう

Python
is_text_show = False
ラッチ先生
ラッチ先生

つぎに、
boonボーンがクリックした時に
変数:isイズ_textテキスト_showショーを 「Trueトゥルー 」にして、文字を表示させます

Python
def on_mouse_down(pos):
    global rotate_direction, is_text_show
スック
スック

グローバル宣言したので、
変数のデータを「Falseフォルス」から「Trueトゥルー」に 変えることができるよ

Python
    if boon.collidepoint(pos):
        rotate_direction = 0
        is_text_show = True
ラッチ先生
ラッチ先生

ifイフ 文を使って、変数isイズ_textテキスト_showショーが 「Trueトゥルー」に なったら
stopストップ!」を 表示させるよ

Python
    if is_text_show:
        screen.draw.text("stop!", center=(400, 220), fontsize=70, color="red")
スック
スック

おおっ!
stopストップ!」が 表示されたぞ

ラッチ先生
ラッチ先生

最後に
この「stopストップ!」を2秒後に消すプログラムを 作ります。
pygame zeroライブラリーには、Clockクロックと言うタイマー機能を提供するオブジェクトがあります。

Clock()クラス
ラッチ先生
ラッチ先生

この中のscheduleスケジュール( )メゾットを使って
stopストップ!」を2秒後に 消します。

まず、「stopストップ!」を消すプログラム
hideハイド_textテキスト関数を 作りましょう

Python
def hide_text():
    global is_text_show
    
    is_text_show = False
スック
スック

変数isイズ_textテキスト_showショーが 「Falseフォルス」になれば、
stopストップ!」の文字列は、消えるもんね

schedule()メゾット
Python
        clock.schedule(hide_text, 2.0)
スック
スック

あれっ?
回転が止まっている時に
boonボーンをクリックしても 「stopストップ!」と 表示が出てしまうよ

ラッチ
ラッチ

おぉぉぉ…と!

クリックするたびに、
onオン_mouseマウス_downダウン関数が 実行してしまうんだ

boonボーンをクリックした時の条件に
boonボーンが 動いているを 付け加えよう

Python
    if boon.collidepoint(pos) and rotate_direction != 0:
        rotate_direction = 0
        is_text_show = True
        clock.schedule(hide_text, 2.0)
スック
スック

うん!
止まっているboonボーンにクリックしても、表示されないね

スック
スック

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

今回は、
左右キーで boonボーンを回転させて、クリックされたら止まるプログラムを
作りました

ラッチ先生
ラッチ先生
Python
import pgzrun

WIDTH = 800
HEIGHT = 590

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

rotate_direction = 1
is_text_show = False

def draw():
    screen.fill("white")
    boon.draw()
    if is_text_show:
        screen.draw.text("stop!", center=(400, 220), fontsize=70, color="red")

def update():
    boon.angle += 5 * rotate_direction

def on_key_down(key):
    global rotate_direction
    
    if key == keys.RIGHT:
        rotate_direction = -1
    
    if key == keys.LEFT:
        rotate_direction = 1

def on_mouse_down(pos):
    global rotate_direction, is_text_show
    
    if boon.collidepoint(pos) and rotate_direction != 0:
        rotate_direction = 0
        is_text_show = True
        clock.schedule(hide_text, 2.0)

def hide_text():
    global is_text_show
    
    is_text_show = False
    
pgzrun.go()
ラッチ先生
ラッチ先生

クリックされたか判別する
collidepointコライド・ポイント()メゾットの使い方が わかったかな

このメゾットを使って 面白いゲームをつくってみよう!

スック
スック

はぁ~い!

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

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

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