カラーパレットの拡張
Python向けレトロゲームエンジン「Pyxel(ピクセル)」で表示色数を増やす実験をしました。
Pyxel 2.0.7 で追加された from_image()メソッド,load()メソッドを使用したもので,実験は 2.0.10 版で行いました。
※本記事の内容は公式にアナウンスされている仕様ではありません。ブラウン管表示やTMXファイル対応で表示機能が拡張されたPyxel 2版ではこんなこともできました,という紹介です。正式な用途はサンプル15「タイルマップファイル (.tmx) の読み込みと描画」(15_tiled_map_file.py)を参照してください。
パレットファイルで使える色を増やす方法
参考記事
Pyxel 1.9版の新機能 パレットファイルを指定する - 勉強ボックス管理者ブログ
pyxel.load()でのリソースファイル指定時に,同名のパレットファイル (.pyxpal) があるとパレットが更新されます。あらかじめパレットファイルに17色目以降の色も定義しておくことで,プログラムから追加したパレットを使用できます。
パレットファイルの例(赤字箇所が追加した3色)
000000
2b335f
7e2072
19959c
8b4852
395c98
a9c1ff
eeeeee
d4186c
d38441
e9c35b
70c6a9
7696de
a3a3a3
ff9798
edc7b0
ff0000
00ff00
0000ff
import pyxel pyxel.init(256,256) pyxel.load("mygame.pyxres") for i in range(16): pyxel.rect(8*i,0,8,40,i) pyxel.text(8,48,"No.16",16) pyxel.text(8,68,"No.17",17) pyxel.text(8,88,"No.18",18) pyxel.colors[18] = 0xFFFF00 # pyxel.colors[19] = 0x00FFFF 未拡張なのでエラーになる pyxel.show()
実行結果
パレットファイルで赤緑青の3色を追加して表示しました。ソース内で色番号18の青を黄色に更新しているので,一番下のテキストが黄色になっています。
基本色以外に,文字色や図形でのエフェクトなどで別の色を使いたいケースで利用できるかと思います。
カラーパレットの画像出力ショートカット
Pyxel 2.0.7 で追加されたPyxelアプリのショートカット「Shift+Alt(Option)+0」を使うと,現在のカラーパレットをデスクトップに保存できます。
基本色のカラーパレット
3色追加したカラーパレット
画像ファイルの色でパレットを拡張する
Imageクラスの from_image()メソッドの色を含む指定の引数に True を指定すると,画像に使われている色でカラーパレットが作成されます。
(Imageクラスの load()メソッドでも,オプションの引数にTrueを指定するとカラーパレットが更新されます)
※フルカラーの画像ファイルを読み込ませて使うとエラーになります。
pyo3_runtime.PanicException: index out of bounds: the len is 255 but the index is 255
pyxel-main\rust\pyxel-engine\src\settings.rs
// Graphics
pub const NUM_COLORS: u32 = 16;
pub const MAX_COLORS: u32 = 255;
255色に近い画像ファイルとして,下記サイトの Material 254 Colors の画面をキャプチャしたファイルを用意しました。
Material Design Color, Flat Colors, Icons, Color Palette | Material UI
読み込ませたファイル
import pyxel pyxel.init(256,256) pyxel.images[0] = pyxel.Image.from_image( "col.png", incl_colors=True ) for i in range(255): pyxel.line(i,0,i,256,i) pyxel.show()
実行結果
※色番号0-15の基本色も画像ファイルの色で更新されます。
※イメージ1に画像を読み込んでも,カラーパレットは共通で更新されます。
import pyxel pyxel.init(572,352,capture_scale=1) pyxel.images[1] = pyxel.Image.from_image( "col.png", incl_colors=True ) pyxel.blt(0,0, 1, 0,0, 572,352) for i in range(255): pyxel.line(i,0,i,256,i) pyxel.show()
実行結果
タイルマップエディタも同時に使う
Pyxelのリソースエディタでタイルマップを作成しつつ,キャラクターの色数を増やすやり方の案です。
Pyxelアプリのショートカットで出力した基本色のカラーパレットを画像の先頭に張り付けて,ドット絵のエディタで他の色を追加したキャラクター用の画像ファイルを作成しました。
別のWindowsアプリで作成したキャラクター用のファイル
Pyxelのエディタでイメージバンク0にタイルマップ用の画像を作成
イメージバンク0の画像を使ってタイルマップ0を作成
pyxel.init(256,256) pyxel.load("mygame.pyxres") # 別のWindowsアプリで作成したファイルを色も含めて読み込む pyxel.image(2).load(0,0,"EDGE1.png", incl_colors=True ) # タイルマップを表示 pyxel.bltm(0,0, 0, 0,0, pyxel.width,pyxel.height, 0) # キャラクターを表示 pyxel.blt(32,32, 2, 16,16, 48,48,0) pyxel.blt(70,50, 2, 64,16, 48,48,0) pyxel.blt(0,128, 0, 0,0, 256,8) # イメージバンク0の一部を表示 pyxel.blt(0,136, 2, 0,0, 256,8) # イメージバンク2の一部を表示 pyxel.show()
実行結果
カラーパレット
タイルマップ用の基本色がそのままになるようにして,色を増やしたい場合は参考にしてみてください。