一つ前のページでは画面に文字を表示する方法について学習しました。
今回は 画面上の画像を動かす方法 について見ていきましょう。
Chapter1:pygame入門|画面を表示しよう
・Chapter1-1:pygameを導入しよう
・Chapter1-2:ゲームループの基本を理解しよう
・Chapter1-3:画面に画像を表示しよう
・Chapter1-4:画面に文字を表示しよう
・Chapter1-5:画面上の画像を動かそう ◁今回はここ
Chapter2:簡単なノベルゲームを作ろう
Chapter3:簡単なアクションゲームを作ろう
Chapter4:ブロック崩しを作ろう
Chapter5:シューティングゲームを作ろう
Chapter6:pygameのお役立ち情報
ゲーム開発において、キャラクターやオブジェクトを動かすことは非常に重要な要素の一つです。
プレイヤーが操作するキャラクターを動かしたり、敵キャラクターが動き回ったりすることで、ゲームはダイナミックになり、より楽しいものになります。
今回は Pygameを使って画面上の画像を動かす方法 を学んでいきます。
本記事を学ぶことで、次のようなスキルを身につけることができます。
- 画像(オブジェクト)の位置を管理する方法
pygame.Rect
を利用した座標の変更- 一定の速度でスムーズに移動させるためのフレームレート制御
これらの基礎を身につければ、キャラクターを動かすアクションゲームや、障害物が移動するゲームなど、さまざまな応用が可能になります。
それでは、実際に画像を動かす方法について学んでいきましょう!
Rectオブジェクトで画像を自在に動かそう
Pygameで画面上の画像を動かすには、オブジェクトの位置情報を管理する必要があります。
そのために、Pygameでは pygame.Rect
(レクト) というクラスを使用します。
Rect
は矩形(四角形)の位置とサイズを保持するデータ構造であり、これを利用すると簡単にオブジェクトの位置を変更することができます。
Rectとは何か?仕組みを理解しよう
Pygameの Rect
クラスは、次の4つの情報を管理するために使われます。
- X座標(左上の位置)
- Y座標(左上の位置)
- 幅(Width)
- 高さ(Height)
Rect
オブジェクトは、次のように作成できます。
import pygame # Rect(開始X座標, 開始Y座標, 幅, 高さ) myrect = pygame.Rect(100, 100, 100, 100)
このコードでは、myrect
という名前の四角形を (100, 100) の位置に作成し、幅100ピクセル、高さ100ピクセルのサイズに設定しています。
座標を変更して画像を動かす方法
Pygameでは、画面の座標は 左上が (0, 0) で、右に進むほど X座標が増加 し、下に進むほど Y座標が増加 します。
(0,0) →→→→→ (+X方向) ↓ ↓ ↓ (+Y方向)
つまり、オブジェクトを右に動かしたい場合は X座標
を増やし、上に動かしたい場合は Y座標
を減らします。
Pygameの Rect
オブジェクトは、x
や y
の値を直接変更することで移動できます。
# 右に1ピクセル移動 myrect.x += 1 # marectのx座標に1を足す # 下に1ピクセル移動 myrect.y += 1 # marectのy座標に1を足す
このように、x
または y
の値を増減することで、オブジェクトを移動させることができます。
Rectを使ってオブジェクトを描画する
Pygameの draw.rect()
関数を使うと、Rect
オブジェクトを画面に描画できます。
pygame.draw.rect(screen, pygame.Color("GREEN"), myrect)
このコードでは、緑色の四角形を myrect
の位置に描画します。
座標とフレーム制御で動きに滑らかさを加えよう
前章ではPygameの Rect
オブジェクトを使用して、画面上のオブジェクトの位置を管理する方法を学びました。
本章ではその Rect
を実際に移動させ、スムーズな動きを実現する方法について学びます。
ゲームループ内でオブジェクトを動かそう
ゲームでは、オブジェクトの移動は メインループ(ゲームループ) 内で行われます。
例えば、次のようなコードで、四角形を右方向に動かすことができます。
while True: # メインループ screen.fill(pygame.Color("BLACK")) # 画面を黒でクリア myrect.x += 1 # 右に移動 pygame.draw.rect(screen, pygame.Color("GREEN"), myrect) # 四角形を描画 pygame.display.update() # 画面更新
このコードでは、myrect.x += 1
によって Rect
の x
座標が毎フレーム1ピクセルずつ増加し、四角形が右に移動します。
tickを使ったFPS(フレームレート)制御の仕組み
このままでは、コンピュータの性能によってオブジェクトの移動速度が異なってしまいます。
そこでPygameの pygame.time.Clock()
を使用して、ゲームのフレームレートを一定に保つ 必要があります。
フレームレートとは、1秒間に何回画面を更新するかを示す値で、「FPS(Frames Per Second)」と呼ばれます。一般的なゲームでは 60FPS(1秒間に60回更新)が標準的な設定です。
Pygameでは pygame.time.Clock().tick(60)
を使って、フレームレートを60FPSに固定できます。
# フレームレートを管理するためのClockオブジェクトを作成 clock = pygame.time.Clock() # フレームレートを60FPSに固定 clock.tick(60)
このコードではclock.tick(60)
によってゲームの更新速度が1秒間に60回に固定され、オブジェクトの移動速度が一定になります。
実践:画像を動かすPythonコードを書いてみよう
ここまで学習した知識を活かして、実際にオブジェクトを動かしてみましょう。
以下のコードは、画面上の四角形が右に動き続ける Pygameのプログラムです。
#1.初期化(ゲームの準備をする) import pygame, sys pygame.init() screen = pygame.display.set_mode((800, 600)) # 四角形の作成(初期位置 (100, 100)、幅100、高さ100) myrect = pygame.Rect(100, 100, 100, 100) # フレームレート制御用のClockオブジェクト clock = pygame.time.Clock() # メインループ while True: screen.fill(pygame.Color("BLACK")) # 画面を黒でクリア myrect.x += 1 # 四角形を右に移動 pygame.draw.rect(screen, pygame.Color("GREEN"), myrect) # 四角形を描画(緑色) pygame.display.update() # 画面の更新 clock.tick(60) # 60FPSに設定(フレームレート制御) # 終了判定(ゲームを終了するかどうかを判定) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit()
コードとその動作の説明
このコードの重要な部分について詳しく説明していきます。
移動する四角形(オブジェクト)の作成
# 四角形の作成(初期位置 (100, 100)、幅100、高さ100) myrect = pygame.Rect(100, 100, 100, 100)
pygame.Rect(x, y, 幅, 高さ)
を使って、(100,100) の位置に 100×100 ピクセルの四角形を作成します。
フレームレート制御
# フレームレート制御用のClockオブジェクト clock = pygame.time.Clock()
pygame.time.Clock()
を使って、フレームレートを管理するオブジェクトを作成します。
オブジェクトの移動
# 四角形を右に移動 myrect.x += 1
毎フレーム、myrect.x
の値を 1
増やすことで、四角形が右に移動します。
オブジェクトの描画
# 四角形を描画(緑色) pygame.draw.rect(screen, pygame.Color("GREEN"), myrect)
pygame.draw.rect()
を使って、四角形を myrect
の位置に緑色で描画します。
フレームレートの設定
# 60FPSに設定(フレームレート制御) clock.tick(60)
clock.tick(60)
を使って、1秒間に60回(60FPS)のペースでゲームを更新します。
練習問題:任意の画像を動かしてみよう
ただの四角形が動くだけでは面白くありません。キャラクターの画像を用意し、それを画面上で動かしてみましょう。
画像は↓↓の勉強猫を保存して使用してください。
Chapter1-3で学習した内容を思い出し、「1.初期化(ゲームの準備をする)」の部分で画損を読み込んで100×100程度の大きさにしておき、myrectで最初の位置を大きさを指定します。
動きは右下から右上に行くなど、先ほどとは違った方向やスピードに設定しましょう。
まとめ
5つのチャプターを通して、ようやく画面が動きました。
これがPygameを使ったゲーム開発の第一歩です。
「ゲーム開発は難しそう」と感じるかもしれませんが、基本を一つずつ理解しながら進めていけば、必ず面白いゲームを作れるようになります。
ぜひこの知識を活かして、自分なりの動くオブジェクトを作成してみてください。
これからもPygameを使って、どんどん楽しいゲームを作っていきましょう!
FAQ|画像のアニメーションとRectの基本について
- Q1. Rectとは何のために使うのですか?
-
Rectは画像の位置やサイズを管理し、移動や衝突判定を簡単に行うための便利なオブジェクトです。
- Q2. 画像がスムーズに動かない原因は?
-
tick()
によるフレームレート制御が適切でない場合や、処理が重いとカクつきが発生します。
- Q3. アニメーション速度はどのように調整する?
-
clock.tick(FPS)
のFPS値を変更することで、動きの速さをコントロールできます。
質問用コンタクトフォーム
この記事を書くにあたりAIを活用しています。
人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。