mieki256's diary



2019/02/06(水) [n年前の日記]

#3 [pyxel] Pyxelをもう少し試したり

以前、Windows10 x64上で、 _Pyxel をインストールして、サンプルファイルを動かすところまでは試してみたことがあるのだけれど。

_mieki256's diary - Pyxelを試用してみたり

せっかくだから、自分も何かしら書いて、動かしてみようかなと。

そんなわけで、まずは Hello World を。 _TIC-80 で、new をした際に作られる雛形と同等の処理をするソースを記述。

helloworld_pyxel_ss01.gif

_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 には、画像、タイルマップデータ、サウンドデータ、ミュージックデータが一つにまとまっている。
  • .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のドキュメントには、
* Alt(Option)+3
画面キャプチャ動画 (gif) をデスクトップに保存する (最大30秒)

pyxel/README.ja.md at master - kitao/pyxel より

と書いてあるのだけど。どうも動作してくれない気配が。

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 から画像データへのアクセスはできるようだし、必要ならば自前でツールを作ることも可能ではあるのかな…。

でも、コマンドラインオプションを指定すると画像をエクスポートできます、みたいな仕様が入ってたら、助かりそうだなと…。

以上です。

過去ログ表示

Prev - 2019/02 -
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project