文字を表示するのは一苦労
HSPでは、もちろん標準で、文字を表示するmes命令というものが備わっています。
そしてもちろん、HSP3dishでもmes命令を使って文字列を描画することができます。
と簡単に思ったら大間違いだ。
立ちはだかる不具合
HSP3dishでは、なぜか、文字列が他の描画に対して最優先される特性を持っています。
動作を確認するために、以下のプログラムをHSPで実行してみましょう。
――――――――――――
#include "hsp3dish.as"
redraw 0
pos 0, 0
color 255, 255, 255
mes "test"
color 0, 0, 255
boxf 0, 0, 480, 800
redraw 1
――――――――――――
白い文字を表示してから、青い矩形を描画しています。
描画順を考えると、文字は矩形の下に隠れて見えないはずなのですが、実行してみると、はっきりくっきり文字が見えます。ちなみに最初のinclude行を取り除くと、dishではなく通常のHSP環境で実行されますが、このときは文字は見えません。
残念ながら、これを防ぐ方法は見当たりませんでした。
大胆な回避策
mes命令ではこの問題を回避できませんが、実に大胆かつ効果的な回避策があります。
文字をあらかじめ画像にしておいて、画像コピーで代替してしまえばいいのです。
そして、それを実現した夢のようなモジュールが既にあります。しまくろねこさんが製作した、mod_picmes.asモジュールです。(以下のリンクにあります)
簡単に使い方としては、「mod_picmes-Editor.exe」で作成した画像を元に、コード側で「mod_picmes.as」をインクルードして機能を利用します。
もともと、Androidでmes命令を使えない問題を解決するために作られたモジュールのようですが、このような使い道もあります。というか汎用性ありすぎて便利すぎます、しまくろねこ様ありがとうございます。
その他メリット、デメリット
今はAndroidでのmesも正式サポートされていますが、この方法には他のメリットもあります。
- 表示レイアウトが環境間で変化しない
標準mes命令では、Windows、iOS、Androidそれぞれの文字列描画関数を呼び出しているので、当然、各環境で表示も微妙に変わってきます。文字を画像にしておけば、どの環境でも見た目が変わりません。
- ふち付き、影付き文字が作れる
mod_picmes-Editor.exeについている機能ですが、なんと文字にふちをつけたり影をつけたりできます。ふち付きにしておけば、周りと色がかぶって見づらいシーンでも、視認性が高くなります。
ただ、1文字で1つ画像をコピーするとあって、処理に負担がかかることもあります。Android環境が厳しく、Nexus 7でテストした限りでは、感覚的にだいたい100~200文字表示すると、処理時間は1/60秒を超えてしまいます。
celputm命令で高速化を図って改善されないかも試してみましたが、やはり厳しかったです…こればっかりは仕方ない。
Windows環境ではDirectXの賜物か、特に気にすることはありません。
0 件のコメント:
コメントを投稿