2019/02/06(水) [n年前の日記]
#3 [pyxel] Pyxelをもう少し試したり
以前、Windows10 x64上で、
_Pyxel
をインストールして、サンプルファイルを動かすところまでは試してみたことがあるのだけれど。
_mieki256's diary - Pyxelを試用してみたり
せっかくだから、自分も何かしら書いて、動かしてみようかなと。
そんなわけで、まずは Hello World を。 _TIC-80 で、new をした際に作られる雛形と同等の処理をするソースを記述。
_helloworld.py
Pyxel用のリソースファイル(*.pyxel)を読み込んで処理するので、以下のファイルも入手・解凍して使わないと動かないです。
_helloworld_pyxel_20190206.zip
ファイルの配置は以下のような感じに。
実行は、以下。
_mieki256's diary - Pyxelを試用してみたり
せっかくだから、自分も何かしら書いて、動かしてみようかなと。
そんなわけで、まずは Hello World を。 _TIC-80 で、new をした際に作られる雛形と同等の処理をするソースを記述。
_helloworld.py
""" Pyxel Hello world. Windows10 x64 + Python 3.7.1 32bit """ import pyxel class App: def __init__(self): w, h = 160, 120 pyxel.init(w, h, caption="Hello World", fps=60) pyxel.load("assets/helloworld.pyxel") self.x = pyxel.width / 2 self.y = pyxel.width / 2 self.counter = 0 pyxel.run(self.update, self.draw) def update(self): if pyxel.btnp(pyxel.KEY_Q): pyxel.quit() if pyxel.btn(pyxel.KEY_LEFT): self.x -= 1 if pyxel.btn(pyxel.KEY_RIGHT): self.x += 1 if pyxel.btn(pyxel.KEY_UP): self.y -= 1 if pyxel.btn(pyxel.KEY_DOWN): self.y += 1 self.counter += 1 def draw(self): # clear screen pyxel.cls(0) # draw image x, y = self.x - 8, self.y - 8 u, v, w, h = 0, 0, 16, 16 img = 0 colkey = 10 pyxel.blt(x, y, img, u, v, w, h, colkey) # draw text col = self.counter % 16 pyxel.text(56, 16, "Hello World!", col) App()
Pyxel用のリソースファイル(*.pyxel)を読み込んで処理するので、以下のファイルも入手・解凍して使わないと動かないです。
_helloworld_pyxel_20190206.zip
ファイルの配置は以下のような感じに。
. |-- assets | `-- helloworld.pyxel | `-- helloworld.py
実行は、以下。
python helloworld.py
◎ 解説。 :
簡単に解説。
Pyxel を使う時は、import pyxel と最初のあたりに書いておく。
pyxel.init(w, h, caption="Caption", fps=60) で、Pyxelの初期化をする。fps= を指定しないと、30FPSになる模様。
pyxel.load(".pyxelへのパス") で、Pyxelのリソースファイル(.pyxel)を読み込む。
pyxel.run(更新処理関数, 描画処理関数) で、更新処理、描画処理をする関数を渡して、メインループを回し始める。
キー入力は、pyxel.btn(pyxel.KEY_LEFT) のような感じで調べられる。押されっぱなしなら True。押されていなければ False。キー定義の一覧は、 _pyxel/constants.py at master - kitao/pyxel を参考に。
pyxel.btnp(pyxel.KEY_xxx) で、キーを押した瞬間を調べられる。
画像の描画は、pyxel.blt(x, y, img, u, v, w, h, colkey) を使う。
画像を反転描画したいときは、w や h にマイナス値を与える。x, y, u, v はそのままでいい。
文字列の描画は、pyxel.text(x, y, "文字列", 色番号) を使う。フォントサイズは…1文字が4x6ドットだろうか…。3x5ドット+余白が縦横1ドット、みたいな感じ。
これだけ分かっていれば、2Dゲームっぽい画面表示ができるのではないかと。
Pyxel を使う時は、import pyxel と最初のあたりに書いておく。
pyxel.init(w, h, caption="Caption", fps=60) で、Pyxelの初期化をする。fps= を指定しないと、30FPSになる模様。
pyxel.load(".pyxelへのパス") で、Pyxelのリソースファイル(.pyxel)を読み込む。
- .pyxel には、画像、タイルマップデータ、サウンドデータ、ミュージックデータが一つにまとまっている。
- .pyxel は、Pyxel に同梱されている pyxeleditor で作ることができる。
pyxel.run(更新処理関数, 描画処理関数) で、更新処理、描画処理をする関数を渡して、メインループを回し始める。
キー入力は、pyxel.btn(pyxel.KEY_LEFT) のような感じで調べられる。押されっぱなしなら True。押されていなければ False。キー定義の一覧は、 _pyxel/constants.py at master - kitao/pyxel を参考に。
pyxel.btnp(pyxel.KEY_xxx) で、キーを押した瞬間を調べられる。
画像の描画は、pyxel.blt(x, y, img, u, v, w, h, colkey) を使う。
- x, y が描画位置。
- img が画像バンク番号。
- u, v, w, h が、画像のどの位置から、どのサイズで画像を取得するか。
- colkey が、透明色扱いにする色番号。
画像を反転描画したいときは、w や h にマイナス値を与える。x, y, u, v はそのままでいい。
文字列の描画は、pyxel.text(x, y, "文字列", 色番号) を使う。フォントサイズは…1文字が4x6ドットだろうか…。3x5ドット+余白が縦横1ドット、みたいな感じ。
これだけ分かっていれば、2Dゲームっぽい画面表示ができるのではないかと。
◎ アニメGIFとしてキャプチャできない。 :
Pyxelのドキュメントには、
Windows10 x64 + Python 3.7.1 x86 + pyxel 1.0.1 で試したところ、Pyxel のウインドウが応答無しになってしまって…。放置しておけばキャプチャできたりするようだけど、キー入力をしてスプライト相当を動かしながらキャプチャしようとすると、全然撮れていない状態に。そのうちスプライト相当もウインドウ内から消えてしまったりして…。何故。
ググってみた感じでは、もしかすると Mac上ならキャプチャできるのかなと…。Windows上では不具合があるのかもしれない。不便。
仕方ないので、今回は、 _GifCam というツールを使ってキャプチャした。
ちなみに、この GifCam というツールは、ググると、作者さんとは全然関係ない悪質なサイトがトップに出てきて、アドウェア入りのソレをダウンロードする羽目になるので、作者さんのサイトからDLすること。現在の最新バージョンは 5.5 なので、「GifCam 2.0 - ダウンロード」なんてリンクは絶対にクリックしないように。
* Alt(Option)+3と書いてあるのだけど。どうも動作してくれない気配が。
画面キャプチャ動画 (gif) をデスクトップに保存する (最大30秒)
Windows10 x64 + Python 3.7.1 x86 + pyxel 1.0.1 で試したところ、Pyxel のウインドウが応答無しになってしまって…。放置しておけばキャプチャできたりするようだけど、キー入力をしてスプライト相当を動かしながらキャプチャしようとすると、全然撮れていない状態に。そのうちスプライト相当もウインドウ内から消えてしまったりして…。何故。
ググってみた感じでは、もしかすると Mac上ならキャプチャできるのかなと…。Windows上では不具合があるのかもしれない。不便。
仕方ないので、今回は、 _GifCam というツールを使ってキャプチャした。
ちなみに、この GifCam というツールは、ググると、作者さんとは全然関係ない悪質なサイトがトップに出てきて、アドウェア入りのソレをダウンロードする羽目になるので、作者さんのサイトからDLすること。現在の最新バージョンは 5.5 なので、「GifCam 2.0 - ダウンロード」なんてリンクは絶対にクリックしないように。
◎ pyxeleditorは墓場かもしれない。 :
pyxeleditor を使ってドットを打った後で気がついたけど。もしかすると、現状では、pyxeleditor はリソースの墓場かもしれないなと。ドットを打っても、別途、他のツールで利用できる画像として取り出せないなと…。他のツールで作った画像を、D&D(ドラッグアンドドロップ)して、インポートすることはできたのだけど、エクスポートをする手段が用意されてない雰囲気。
TIC-80 のように、画像だけでもエクスポートできれば助かる場面もありそうな予感。
でもまあ、Pyxel から画像データへのアクセスはできるようだし、必要ならば自前でツールを作ることも可能ではあるのかな…。
でも、コマンドラインオプションを指定すると画像をエクスポートできます、みたいな仕様が入ってたら、助かりそうだなと…。
TIC-80 のように、画像だけでもエクスポートできれば助かる場面もありそうな予感。
でもまあ、Pyxel から画像データへのアクセスはできるようだし、必要ならば自前でツールを作ることも可能ではあるのかな…。
でも、コマンドラインオプションを指定すると画像をエクスポートできます、みたいな仕様が入ってたら、助かりそうだなと…。
[ ツッコむ ]
以上です。