Pyxel 1.0 から 1.1 への移行方法

こちらの記事は2019年時点の古い情報になります。最新の情報はこちらをご参照ください。


久々の更新。

Pyxel向けレトロゲームエンジンPyxelを昨年にリリースしてから1年が経ちました。

おかげさまで様々な国の方々が使ってくださり、感想もたくさんいただいています。特に「こんなゲーム作ったよ」と教えてもらえる時がうれしいです。

また、工学社の月刊 I/O にて、Pyxel解説記事も(好評?)連載中です。書店で見かけたら手にとってみていただければ幸いです。

Pyxel本体の開発も続けており、先日、半年ぶりのメジャーアップデートとなるPyxel 1.1をリリースをしました。

Pyxel 1.1は大幅に性能が向上している一方、インストール方法や一部APIの仕様が変更となっているため、以前のバージョンを使っていた方は少々注意が必要です。

そこで今回は、Pyxel 1.0 から 1.1 への移行方法について解説したいと思います。

Pyxel 1.1 について

Pyxel 1.1 の最大の変更点は、描画エンジンをPythonGLFWによる実装から、C++SDL2による実装に全面刷新したことです。

旧バージョンでは、PythonからGLFWの関数を呼び出す際のオーバーヘッドによる速度低下と、実行環境によってGLFWのシェーダーの処理結果が微妙に異なるという問題があったのですが、今回の変更により、実行速度が15〜20倍高速に、また動作環境によらず同じ描画が行えるようになりました。

また、描画エンジンの刷新を機に、いくつかのAPI仕様の見直しを行いました。

APIの変更については、これまでのコードとの互換性がなくなるため非常に迷ったのですが、コードが簡潔になるのと、他のAPIとの整合性が取れる(=覚えることが少なくなる)ことから変更に踏み切らせてもらいました。

仕様の変更点について、個別に説明していきます。

インストール方法

新バージョンではSDL2を利用するため、一部環境でインストールの手順が変更になります。

  • Windows
    特に変更はありません。従来通りPython3をインストールしたのちに、pip install pyxelでインストールできます。

  • Mac
    GLFWの代わりにSDL2をインストールします。Homebrew経由でインストールする場合は以下の手順になります。

brew install python3 sdl2 sdl2_image
pip3 install pyxel
  • Linux
    Macと同様、SDL2のインストールが必要になります。Ubuntu環境であれば、以下の手順になります。
sudo apt install python3 python3-pip libsdl2-dev libsdl2-image-dev
sudo pip3 install pyxel

描画APIの仕様変更

おそらく今回もっとも影響を受ける人が多いであろう変更です。

clip (描画領域を設定する)、rect (塗りつぶし矩形を描画する)、rectb (矩形の輪郭線を描画する)の各APIの範囲の設定方法が、左上座標+右下座標 (x1, y1, x2, y2)から、左上座標+幅と高さ (x, y, w, h)になりました。

例えば、(x, y)に幅と高さが8の矩形を描画する場合、これまで、

pyxel.rect(x, y, x + 7, y + 7, 3)

と記述していたものが、

pyxel.rect(x, y, 8, 8, 3)

のようになります。

Tilemapクラスのメソッドの引数の変更

Tilemapクラスのsetメソッドのオプション引数refimgを削除しました。

新しい書式は、Tilemap.set(x座標, y座標, 文字列)となります。

再生位置プロパティの追加

新たにサウンドの再生位置を取得するplay_pos変数を追加しました。

pos = pyxel.play_pos(0)

上記のように記述すると、チャンネル0のサウンド再生位置が取得できます。

posの値が1234だった場合は、サウンド番号は12、ノート番号は34という意味になります。

このAPIを使って、Pyxel製の音ゲーが作られるようになるといいですね。

Pyxelリソースファイルのフォーマットの変更

Pyxelリソースエディタを使って作成するPyxelリソースファイルの拡張子とデータフォーマットが変更になりました。

旧バージョンでは.pyxelという拡張子でしたが、新バージョンでは.pyxresになっています。拡張子名変更の理由は、Pyxel Editというドット絵作成ツールと拡張子名が被っていたためです。

.pyxresファイルは各データをzip形式で圧縮した形式になっているので、拡張子を.zipに変更・解凍することで、データをテキストエディタで編集することも可能です。

これまで作成した.pyxelファイルの読み込みも継続対応しており、リソースエディタで.pyxelファイルを読み込み、保存し直すことで、.pyxres形式に変更できます。

今後の予定

今後のバージョンアップについて、まだ具体的な予定は決めていませんが、単体実行可能な形式への変換をできるようにしたいと考えています。

それと、今Rustを勉強しているので、もしかすると描画エンジンをRustで作り直すかもしれません。やっぱり新しいプログラミング言語は面白いですね!