2019/02/06(水) [n年前の日記]
#1 [pyxel][cg_tools] ドットエディタEDGE/EDGE2及びGIMPで使えるPyxel用のパレットファイルを作成
_Pyxel
を触っているうちに、ふと、ドットエディタ、
_EDGE
/
_EDGE2
で使えるPyxel用のパレットファイル(*.pal)があったら作業が楽になるのではと思ったわけで。
ということで、一応作ってみたりして。ついでに、GIMP用のパレットファイル(*.gpl)も作成。使えそうなら自由に使ってください。
_pyxel_palette_data_20190206.zip
中には以下のファイルが入ってます。
一応、テキスト形式のファイルも、そのまま置いておこうかな…。EDGE/EDGE2用パレットファイルはバイナリファイルっぽいからそのまま置けないけど…。
_Pyxel.gpl.txt
_pyxel_palette.csv.txt
_pyxel_palette.txt
しかし、作った後で気がついた。
Pyxelのパレットデータは、PICO-8と同じだから、Web上のあちこちで既に公開されてる、PICO-8用のパレットファイルを使えば済んだのだな…。わざわざ、GIMPパレットファイルを新規に作る意味は無かった。無駄な作業をしてしまった…。
ということで、一応作ってみたりして。ついでに、GIMP用のパレットファイル(*.gpl)も作成。使えそうなら自由に使ってください。
_pyxel_palette_data_20190206.zip
中には以下のファイルが入ってます。
- pyxel_palette_edge1.pal : EDGE用パレットファイル
- pyxel_palette_edge2.pal : EDGE2用パレットファイル
- Pyxel.gpl : GIMP用パレットファイル
- pyxel_palette.csv : カンマ区切りのRGB値
- pyxel_palette.txt : タブ区切りのRGB値
一応、テキスト形式のファイルも、そのまま置いておこうかな…。EDGE/EDGE2用パレットファイルはバイナリファイルっぽいからそのまま置けないけど…。
_Pyxel.gpl.txt
_pyxel_palette.csv.txt
_pyxel_palette.txt
しかし、作った後で気がついた。
Pyxelのパレットデータは、PICO-8と同じだから、Web上のあちこちで既に公開されてる、PICO-8用のパレットファイルを使えば済んだのだな…。わざわざ、GIMPパレットファイルを新規に作る意味は無かった。無駄な作業をしてしまった…。
[ ツッコむ ]
#2 [cg_tools] ドットエディタEDGE/EDGE2のパレットファイルは謎
EDGE / EDGE2 のパレットファイルを作ろうとした際に、なんとなく思ったけれど。今時バイナリファイルでデータを持つのってどうなんだろうなと。このくらいのデータ量なら、GIMPのパレットファイル(.gpl)のように、テキストファイルで持ったほうが、別途編集しやすいような…。
まあ、EDGE / EDGE2 の、パレットファイルのフォーマットが謎というかクローズドなので、変換ツールの類を作るのが面倒で、せめてテキスト形式だったら良かったのに、などと思ってしまった、それだけの話だったりするのだけれど。
また、EDGE には、パレットデータのRGB値をテキストファイルで出力したり、逆にテキストファイルから読み込んだりする機能があるのだけれど。出力したソレが、入力用として使えないあたりも謎で。どうして同じ形式にしておかなかったのか…。読み込むためのデータを作る際、フォーマットが不明だからちょっとハマってしまったり。出力形式と同じなのだろうと思い込んでテキストを作って読み込んだら、妙な色になっておかしいなと。只のカンマ区切りを読み込ませるのだな…。
まあ、EDGE は既に開発完了したツールだから、今更そのあたり考えてみてもしょうがないのだけど。
まあ、EDGE / EDGE2 の、パレットファイルのフォーマットが謎というかクローズドなので、変換ツールの類を作るのが面倒で、せめてテキスト形式だったら良かったのに、などと思ってしまった、それだけの話だったりするのだけれど。
また、EDGE には、パレットデータのRGB値をテキストファイルで出力したり、逆にテキストファイルから読み込んだりする機能があるのだけれど。出力したソレが、入力用として使えないあたりも謎で。どうして同じ形式にしておかなかったのか…。読み込むためのデータを作る際、フォーマットが不明だからちょっとハマってしまったり。出力形式と同じなのだろうと思い込んでテキストを作って読み込んだら、妙な色になっておかしいなと。只のカンマ区切りを読み込ませるのだな…。
まあ、EDGE は既に開発完了したツールだから、今更そのあたり考えてみてもしょうがないのだけど。
[ ツッコむ ]
#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 から画像データへのアクセスはできるようだし、必要ならば自前でツールを作ることも可能ではあるのかな…。
でも、コマンドラインオプションを指定すると画像をエクスポートできます、みたいな仕様が入ってたら、助かりそうだなと…。
[ ツッコむ ]
以上、1 日分です。