Pythonプログラミングの勉強法

【Pythonゲーム】リアルタイム処理の基本

こんにちは、みやびのです。

今回は、「Pythonゲームにおけるリアルタイム処理の基本」というテーマでお話しします。
アクションゲームやシューティングゲーム・RPGなどほぼ全てのゲームでリアルタイム処理は必須です。

リアルタイム処理がなければゲームは成立しません。
「リアルタイム処理」と聞くと難しく考えてしまうかもしれませんが、基本的な構造は単純です。

PythonだけでなくUnity(C#)などにも応用できるので覚えておきましょう。

本記事の内容は以下の通り。

・ゲーム制作におけるリアルタイム処理のポイント
・リアルタイム処理実装の具体例~Pythonistaを例に解説~

ゲーム制作におけるリアルタイム処理のポイント

リアルタイム処理で押さえておくべきポイントは「初期設定処理」、「更新ループ処理」、「キー入力時処理」の3つです。

ゲームを起動するとまずは「初期設定処理」が呼ばれ、以降は更新ループ処理に入ります。更新ループ処理中にキーが入力された場合にキー入力処理が動作します。

リアルタイム処理のフロー

他にも処理やタイミングは存在しますが、「初期設定処理」、「更新ループ処理」、「キー入力時処理」の3つを覚えておけば、簡単なリアルタイム処理を作成できます。

初期設定処理

ゲームを起動した直後に1度だけ呼ばれる処理です。背景やキャラクターの描画、初期BGMの追加などに活用できます。

更新ループでもデータを読み込むことができますが、毎回データを全て読み込んでいたら処理が重くなり、画面の切り替えやキャラクターの動きが遅くなります。

初期設定で一通りのデータを読み込んでおくことで更新時の処理を軽くすることが可能です。

更新ループ処理

初期設定が終わった後は無限ループに入ります。1フレーム(1/60秒)ごとに更新処理を呼び出します。

更新処理はリアルタイム処理の中で最も重要な処理で、以下のようにゲームを進行させるための様々な場面で活用可能です。

・背景の切り替え
・プレイヤーキャラクターを自然な形で移動させる
・アニメーションを表示
・敵キャラクターや弾道・アイテムを動かす

キー入力時処理

キーボードやマウスをクリックしたとき、スマホの場合は画面をタッチした時などに動く処理です。

キャラクターの移動開始あやジャンプなどのアクションを起こす時に活用できます。

リアルタイム処理実装の具体例~Pythonistaを例に解説~

リアルタイム処理の実装例についてiPhoneアプリであるPythonistaのsceneライブラリを用いて実装する場合を例に解説します。

sceneはPythonista専用ですが、簡単にアニメーションやアクションゲームを作れるライブラリです。サンプルゲームもあるので遊びながら学べます。

関連記事>>遊んで学ぶPythonista・sceneライブラリの基本

今回は「Pythonista+sceneで当たり判定を作成する方法」という記事で紹介しているコードを例に説明します。

実行例は以下の通り。

ソースコードの細かい処理を理解する必要はありません

「初期設定では必要などういった項目を追加するのか?」
「更新処理では何をすべきか?」
といったイメージができればOKです。

Pythonistaで実装する準備

Pythonistaではゲーム作成用のテンプレートがあるので簡単に実装の準備ができます。

+ボタンをクリック
+ボタンをクリック
sceneの「Game/Animation」を選択します
Game Animationを選択
適当なファイル名を入力して「Create」をクリックします
Createを選択

初期設定処理の実装

初期設定には、「setup()」メソッドに記述します。
初期設定で行う処理は、以下の通り。

・背景の追加
・キャラクターやアイテムの追加
・スコアの追加

上記をコードにした実装例は以下の通り。

上記例は1画面ですが、最初の画面でアイテムが描画されない場合でも予め画像を読み込んでおくことで、更新処理の動作を軽くすることができます。

更新処理の実装

更新処理は「update」メソッドに記述します。

更新処理に記述する内容は「キャラクターの移動処理」、「当たり判定」、「ジャンプ中チェック」です。

キー入力処理(タッチ処理)の実装

キー入力処理(タッチ処理)には「touch_began()」、「touch_moved()」、「touch_ended()」の3つのメソッドがあります。

touch_began():タッチした直後に動く処理
touch_moved():タッチしたまま指をスライドさせた場合に動く処理
touch_ended():指を画面から離した時に動く処理

今回は「touch_began()」と「touch_moved()」を使ってキャラクターをジャンプさせる処理を実装します。
touch_began()でpowerのカウントアップを開始。
touch_ended()でpowerの数値に応じた高さのジャンプをします。

touch_ended()でやることはジャンプへの状態遷移のみで、実際のジャンプ処理はupdate()で行います。

関連記事>>Pythonista+sceneで最初に理解しておくべき3つのメソッド

終わりに

今回はゲームのリアルタイム処理について紹介しました。
ゲームを作る場合はほぼ必須の処理であるため必ず覚えておきましょう

考え方自体は難しくありませんし、Pythonistaのsceneのように予めリアルタイム処理のメソッドや関数が用意されている場合もあります。

是非挑戦してみてください。

関連記事>>Pythonistaの使い方まとめ

こちらの記事も読まれています

  • この記事を書いた人
miyabikno

みやびの

住んでいるところ:神奈川県。 プログラミング歴は13年ほど。 ※プログラミングに関する無料相談・質問への回答は行っていません。

-Pythonプログラミングの勉強法
-

Copyright© みやびのどっとぴーわい , 2020 All Rights Reserved Powered by AFFINGER5.