背景
pyxel製のゲームだとデフォルトだとフォントサイズが変更できないらしいと聞いたのでやり方を調べてみた。
きっかけになった方的にはもう要らなそうだったが、せっかくやってみたので供養する。
以下のようなシチュエーションの問題を解決する。結構ニッチなニーズかも。
①pyxelで作ったゲームでフォントサイズ変えたい→PyxelUnicodeをインストールする。
②pyxelだけインストールしてある別PCで動かしたい→PyxelUnicodeが別PCに入っていないとモジュールがなくてエラーになる(可能性がある)。
※別PCでPyxelUnicodeのインストール作業が必要。requirements.txtを書いても使ってくれない可能性がある。
pyxel.textでフォントサイズ変えれないことがそもそもの発端なので、変えれるになったら不要な話かも。
前提
- OSはWindows10
- PowerShellで作業
- pyhtonコマンドが使えること
- pipコマンドが使えること
- 最新にするなら以下のコマンドを実行しておく
- $ python -m pip install –user –upgrade pip
- 最新にするなら以下のコマンドを実行しておく
- pyxelをインストールしていること(pythonでゲームが起動できればいいのでpyxelコマンドは使えなくてもOK)
手順
1. 作業フォルダに実行したいメインプログラムを格納する
画像ではサンプルプログラムにある09_shooter.pyをメインプログラムとして入れている。myfile2が作業フォルダ。
2. libraryフォルダにPyxelUnicodeをインストール
pipコマンドの引数-tでパッケージの展開先を指定できるので、それを作業フォルダ内にするだけ。
PS> python -m pip install -t ./library pyxelunicode
Collecting pyxelunicode
Using cached pyxelunicode-1.0.4-py3-none-any.whl (17 kB)
Collecting Pillow
Using cached Pillow-9.4.0-cp38-cp38-win_amd64.whl (2.5 MB)
Collecting pyxel
Using cached pyxel-1.9.11-cp37-abi3-win_amd64.whl (2.1 MB)
Installing collected packages: pyxel, Pillow, pyxelunicode
Successfully installed Pillow-9.4.0 pyxel-1.9.11 pyxelunicode-1.0.4
3. 表示するフォントをダウンロード
PyxelUnicodeのページで紹介されているフォントからダウンロードしてもいいし、unicode対応のフォントなら何でもいいと思う。
ここでは「Pixel UniCode」を使う。
PS> wget https://dl.dafont.com/dl/?f=pixel_unicode -outfile pixel_unicode.zip
PS> Expand-Archive -Path pixel_unicode.zip
作業フォルダ内にpixel_unicode/Pixel-UniCode.ttfが作成されていればOK
4. PyxelUnicode.pyのインポート文を修正する
PyxelUnicode.pyがsite-packagesにインストールされる前提で書かれているので、そのままだとインポートエラーになる。
よって、モジュールの検索パスを修正する。
変更箇所はPyxelUnicode.pyの1行目。
#from PIL import Image, ImageFont, ImageDraw
from ..PIL import Image, ImageFont, ImageDraw
※PyxelUnicode.pyは「作業フォルダ/library/pyxelunicode/PyxelUnicode.py」に格納されているはず。
5. メインプログラムでPyxelUnicodeのオブジェクトを生成を追記
PyxelUnicodeを使用できるようにするため、メインプログラムにモジュールのインポート文とオブジェクトの生成処理を追記。
# ヘッダに追記
import sys
import os
from library.pyxelunicode import PyxelUnicode
# 適当なところに追記
font_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'pixel_unicode', 'Pixel-UniCode.ttf')) # 使うフォントのパス
font_size = 16 # フォントサイズ
pyuni = PyxelUnicode(font_path, font_size)
この時点で実行してみてエラーが出るならどこか間違ってる可能性があるので見直し。
6. テキストを出してみる
# pyxel.text(31, 126, "- PRESS ENTER -", 13)
pyuni.text(21, 126, "- PRESS ENTER -", 13)
プログラムが起動してテキストが表示されていたら成功。
フォントサイズを変えて見るべし。
PyxelUnicodeに限らず入れたいpyxelで使いたいモジュールとかあったら応用できるはず。
冒頭にも書いてるが必要パッケージを普通にインストールしてもらえる状況ならrequirements.txtを使った方がややこしいことしないで済むので良いと思う。