使いづらい。
成果物
コード
#!/usr/bin/env python3 # coding: utf8 import pyxel def update(): pass def draw(): pyxel.bltm(0, 0, 0, 0, 0, 32, 32) pyxel.init(32, 32, caption='TileMap API Test') pyxel.image(0).set(0, 0, [ "3333333333333333", "333333333333a333", "33333b33333a7a33", "33333b333333a333", "33333b333333b333", "3b333333333bbb33", "3b3333333333b333", "3333333333333333", "4444444400000000", "4444444400000000", "44444d4400000000", "4444444400000000", "4444444400000000", "4444444400000000", "4d44444400000000", "4444444400000000", ]) pyxel.tilemap(0).refimg = 0 pyxel.tilemap(0).set(0, 0, [ '001000000000', '000001000000', '000000001000', '000000000001' ]) pyxel.run(update, draw)
要点
pyxel.tilemap(0).set(0, 0, [ '001000000000', '000001000000', '000000001000', '000000000001' ])
これはタイルID0
と1
を使っている。タイルIDは0
〜3ff
まで。タイル1枚あたり3桁必要。なので0
番は000
, 1
番は001
と表現している。16進数。英字は小文字。
わかりづらい
- 文字列の1次元配列である
- IDを文字列で表している
- 横(X軸)のタイルIDを文字列で連結している
なんたるクソ仕様か。
こうして欲しかった
数値の二次元配列にして欲しい。
- 文字列ならせめて1つの文字列が良かった
- 数値の二次元配列にしてくれ
文字列ならせめて1つの文字列が良かった
pyxel.tilemap(0).set(0, 0, """001000000000 000001000000 000000001000 000000000001 """)
1行ずつの文字列リストにするとか面倒なだけで何のメリットも無いと思うのだが……。
数値の二次元配列にしてくれ
pyxel.tilemap(0).set(0, 0, [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]])
整数値型にしたほうが良い。加算など算術計算できて動的に変更しやすいから。ランダムマップを作るときに好都合。
文字列の場合、変更するたびに毎回、以下のような面倒な処理が必要になる。
- IDを算術計算する
- IDを文字列化する
- 3桁であること
- ゼロ埋めすること
- 16進数であること
- 英字は小文字であること
騙された
APIには以下のように書いてある。
data タイルマップのデータ (256x256の二次元リスト)
しかし、以下のような問題があった。騙された。
- 代入できない
- 二次元リストでない
以下のようなコードではエラーになる。
pyxel.tilemap(0).data = [[1,0],[0,1]] pyxel.tilemap(0).data = [['001','000'],['000','001']] pyxel.tilemap(0).set(0, 0, [[1,0],[0,1]]) pyxel.tilemap(0).set(0, 0, [['001','000'],['000','001']])
たぶんTileMap.data
は整数値の二次元配列なのだろうが、代入できない。公開されているAPIのうち代入できるset()
は文字列配列型で受け付ける仕様なのだろう……。
どうやって作ったか
タイル画像はイメージエディタで編集し、.pyxres
を展開し、vim
でコピペした。以下参照。
前回まで
- ラズパイ4Bにpyenvをインストールする(python 3.8.2)
- pyxelをインストールする(pyenv python3.8.2)
- pyxeleditorにおけるImageエディタの使い方
- pyxeleditorにおけるTileMapエディタの使い方
- pyxeleditorにおけるSoundエディタの使い方
- pyxeleditorにおけるMusicエディタの使い方
- pyxelのリソースにおける概念・制限まとめ
- pyxeleditorにおけるpyxresファイル形式まとめ
- pyxelのAPI調査
- pyxelで最小コード 窓を出す
- Pyxelで窓の境界線を消す
- 携帯ゲーム機の解像度
- pyxelで矩形を描画する
- pyxelで荒ぶる矩形
- pyxelでキーに応じて動く矩形
- pyxelで画像を描画する
- pyxelで画像をアニメーションする(スプライト。パラパラ漫画)
- pyxelで左右反転した画像を使ってアニメーションする
- pyxelでテキストを表示する
- pyxelで日本語を表示する1(ビットマップ・フォント)
- ビットマップフォント作成(TTF→PNG)
- pyxelでPNG画像をビットマップフォントとして読込・表示する(日本語表示)
- pyxelのAPIで音を鳴らす
- 画像、音声、動画をHTMLで再生する
- pyxelのAPIでSoundをつなげて鳴らす
- pyxelのAPIでMusicに組み立てて鳴らす
- pyxelのAPIでImageをつくる
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release
- pyxel 1.3.1
$ uname -a Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux