ながみえ
pggameを用いてゲームアプリを作成する手順を紹介するサイトの、画面上の画像を動かす方法を紹介する記事のアイキャッチ画像

一つ前のページでは画面に文字を表示する方法について学習しました。

今回は 画面上の画像を動かす方法 について見ていきましょう。

Chapter1:pygame入門|画面を表示しよう
・Chapter1-1:pygameを導入しよう
・Chapter1-2:ゲームループの基本を理解しよう
・Chapter1-3:画面に画像を表示しよう
・Chapter1-4:画面に文字を表示しよう
・Chapter1-5:画面上の画像を動かそう ◁今回はここ
Chapter2:簡単なノベルゲームを作ろう
Chapter3:簡単なアクションゲームを作ろう
Chapter4:ブロック崩しを作ろう
Chapter5:シューティングゲームを作ろう
Chapter6:pygameのお役立ち情報

ゲーム開発において、キャラクターやオブジェクトを動かすことは非常に重要な要素の一つです。

プレイヤーが操作するキャラクターを動かしたり、敵キャラクターが動き回ったりすることで、ゲームはダイナミックになり、より楽しいものになります。

今回は Pygameを使って画面上の画像を動かす方法 を学んでいきます。

本記事を学ぶことで、次のようなスキルを身につけることができます。

  • 画像(オブジェクト)の位置を管理する方法
  • pygame.Rect を利用した座標の変更
  • 一定の速度でスムーズに移動させるためのフレームレート制御

これらの基礎を身につければ、キャラクターを動かすアクションゲームや、障害物が移動するゲームなど、さまざまな応用が可能になります。

それでは、実際に画像を動かす方法について学んでいきましょう!

<<前のページ

pygameの記事一覧

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

次のページ>>

Pythonの学習の区切りを表し、記事一覧へ戻ることを促す画像

Rectオブジェクトで画像を自在に動かそう

Pygameで画面上の画像を動かすには、オブジェクトの位置情報を管理する必要があります。

そのために、Pygameでは pygame.Rect(レクト) というクラスを使用します。

Rect は矩形(四角形)の位置とサイズを保持するデータ構造であり、これを利用すると簡単にオブジェクトの位置を変更することができます。

【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

Rectとは何か?仕組みを理解しよう

Pygameの Rect クラスは、次の4つの情報を管理するために使われます。

  1. X座標(左上の位置)
  2. Y座標(左上の位置)
  3. 幅(Width)
  4. 高さ(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 オブジェクトは、xy の値を直接変更することで移動できます。

# 右に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 の位置に描画します。

【Python】勉強猫がノートパソコンを見ながら考え込む様子。記事内の休憩用イラスト

座標とフレーム制御で動きに滑らかさを加えよう

前章では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 によって Rectx 座標が毎フレーム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)のペースでゲームを更新します。

練習問題:任意の画像を動かしてみよう

ただの四角形が動くだけでは面白くありません。キャラクターの画像を用意し、それを画面上で動かしてみましょう。

画像は↓↓の勉強猫を保存して使用してください。

Pythonの勉強猫

Chapter1-3で学習した内容を思い出し、「1.初期化(ゲームの準備をする)」の部分で画損を読み込んで100×100程度の大きさにしておき、myrectで最初の位置を大きさを指定します。

動きは右下から右上に行くなど、先ほどとは違った方向やスピードに設定しましょう。

まとめ

5つのチャプターを通して、ようやく画面が動きました。

これがPygameを使ったゲーム開発の第一歩です。

「ゲーム開発は難しそう」と感じるかもしれませんが、基本を一つずつ理解しながら進めていけば、必ず面白いゲームを作れるようになります。

ぜひこの知識を活かして、自分なりの動くオブジェクトを作成してみてください。

これからもPygameを使って、どんどん楽しいゲームを作っていきましょう!

<<前のページ

pygameの記事一覧

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

次のページ>>

Pythonの学習の区切りを表し、記事一覧へ戻ることを促す画像

FAQ|画像のアニメーションとRectの基本について

Q
Q1. Rectとは何のために使うのですか?

Rectは画像の位置やサイズを管理し、移動や衝突判定を簡単に行うための便利なオブジェクトです。

Q
Q2. 画像がスムーズに動かない原因は?

tick()によるフレームレート制御が適切でない場合や、処理が重いとカクつきが発生します。

Q
Q3. アニメーション速度はどのように調整する?

clock.tick(FPS)のFPS値を変更することで、動きの速さをコントロールできます。

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

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

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

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

記事URLをコピーしました