pyxelでフォントサイズを変えつつ持ち運び可能にする

背景

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
library/pyxelunicodeとlibrary/PILフォルダが作成されていればOK

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行目。

PyxelUnicode.pyの1行目
#from PIL import Image, ImageFont, ImageDraw
from ..PIL import Image, ImageFont, ImageDraw

※PyxelUnicode.pyは「作業フォルダ/library/pyxelunicode/PyxelUnicode.py」に格納されているはず。

5. メインプログラムでPyxelUnicodeのオブジェクトを生成を追記

PyxelUnicodeを使用できるようにするため、メインプログラムにモジュールのインポート文とオブジェクトの生成処理を追記。

メインプログラム(ここでは09_shooter.py)
# ヘッダに追記
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. テキストを出してみる

09_shooter.py
# pyxel.text(31, 126, "- PRESS ENTER -", 13)
pyuni.text(21, 126, "- PRESS ENTER -", 13)

プログラムが起動してテキストが表示されていたら成功。
フォントサイズを変えて見るべし。

変更前
変更後

PyxelUnicodeに限らず入れたいpyxelで使いたいモジュールとかあったら応用できるはず。

冒頭にも書いてるが必要パッケージを普通にインストールしてもらえる状況ならrequirements.txtを使った方がややこしいことしないで済むので良いと思う。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA