Pyxelは9個のサンプルが用意されています。
これらのサンプルのソースコードを見ることで、Pyxelでのゲーム開発をどのようにすれば良いのかを解説していきます。
※サンプルは2021年2月6日時点のものを使っています。
サンプルの内容は今後変更になるかもしれません。
01_hello_pyxel.pyはどんなサンプル?
01_hello_pyxel.pyのソースコードの解説の前に、まずは実行してみてどんなサンプルなのか確認してみましょう。
01_hello_pyxel.pyを実行すると下のようなサンプルが実行されます。
「Hello, Pyxel!」という文字が様々な色で表示されて光っているように見え、Pyxelのロゴが表示されています。
01_hello_pyxel.pyのソースコード解説
では、ソースコードの解説をしていきます。
ソースコード全部はここに載せないので、各自エディタなどで確認してください。
01_hello_pyxel.pyの構成について
1行目のimport、4行目~17行目のAppクラスの定義、20行目のAppインスタンスの生成となっています。
サンプルの処理内容はAppクラスの定義内で行なわれていることがわかります。
公式サイトでもクラスでPyxelの処理をラップするのが推奨されています。
import
Pyxelを使用するためにimportで宣言します。
今回のサンプルでは、他に使用するモジュールはないので、importはPyxelのみですね。
実際のソースコードでは「Pyxel」ではなく、先頭文字が小文字の「pyxel」になることに注意してください。
Appクラスの定義
Appクラスでは、コンストラクタ、updateメソッド、drawメソッドの3つに分かれています。
5行目~8行目がコンストラクタ、10行目~12行目がupdateメソッド、14行目~17行目がdrawメソッドになります。
コンストラクタ
コンストラクタの処理を一つずつ見ていきましょう。
まずは6行目は下のコードになっています。
pyxel.init(160, 120, caption="Hello Pyxel")
Pyxelアプリの画面についての初期化になります。
第1引数の160が画面の横幅、第2引数の120が画面の縦幅の設定になります。
第3引数のcaption=”Hello Pyxel”は画面上部に表示されるキャプションの設定です。
initの詳細については、公式サイトのAPIリファレンスのシステムに記載があります。
次の7行目は下のコードになります。
pyxel.image(0).load(0, 0, "assets/pyxel_logo_38x16.png")
ロゴのデータの読み出し処理になります。
バンク0の0,0の位置にロゴを読み込む処理をしています。
8行目は下のコードになります。
pyxel.run(self.update, self.draw)
Pyxelアプリを開始するコードになります。
フレーム更新時に第1引数のupdate、描画時に第2引数のdrawを呼び出します。
updateとdrawの処理がそれぞれ、10行目~12行目と14行目~17行目になります。
update
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
updateの処理内容ですが、「Q」のキーが押されたら、アプリを終了という処理になります。
キーが押されているかどうかの処理についてはbtn、btnp、btnrを使うことができます。
アプリの終了にはquitを使います。
draw
15行目
pyxel.cls(0)
画面を第1引数0の色でクリアする処理になります。
ここで0の色は黒になります。
なので、描画時はまず黒で画面をクリアするということになります。
16行目
pyxel.text(55, 41, "Hello, Pyxel!", pyxel.frame_count % 16)
画面でキラキラ光っているように見える「Hello, Pyxel!」の文字の描画処理です。
第1引数の55はx、第2引数の41はyの位置に文字を表示するという設定になります。
第3引数の”Hello,Project!”は表示させる文字の設定です。
第4引数は色の設定になります。
経過フレーム数を16で割った時の余りを色の設定として使うことで様々な色が表示されてキラキラ光って見えるような処理になっています。
17行目
pyxel.blt(61, 66, 0, 0, 0, 38, 16)
7行目のところで読みだしたロゴを表示する処理になります。
第1引数の61、第2引数の66が画面に表示する時のx、y座標になります。
第3引数の0はイメージバンクの指定です。
7行目のところでバンク0に読みだしているので、0を指定しています。
第4引数から第7引数がコピーしてくる領域の指定になります。
このあたりの関係性は公式サイトを一度確認してみてください。
Appインスタンスの生成
最後の20行目で、これまで定義したAppクラスのインスタンスの生成を行っています。
まとめ
01_hello_pyxel.pyは単純なアプリですが、単純だからこそPyxelでどのようにソースコードを書けば、どのように動作するのかがわかりやすいと思います。
プログラミング自体に慣れていない方は、まずこの01_hello_pyxel.pyのソースコードいろいろと変更してみて、動かしてみるのが良いと思います。
※サンプル2つ目の解説記事も作りました。
コメント