2015年11月27日金曜日

HSP3dishで文字を描きたい

おはろー、セルディアです。

文字を表示するのは一苦労


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 件のコメント:

コメントを投稿