SGEで文字を出力する。
SGEで文字を画面に表示するのは、いくつかの難関があります。そのはまりやすい点について書きます。
基本的に、SGEの画面表示は、draw.beginscene()で始まりdraw.endscene()で終わります。この二つの命令に各種draw命令を記述しますが、drawできる(画面に表示できる)のは、textureだけです。
そして文字はbitmapにしか書き込めません。ですから、一旦bitmapに文字を書いて、それをtextureに変換してから表示することになります。
define({name="MS ゴシック", width=22, height=22}) -- フォントをMSゴシックにする。大きさは縦横22ドット。ちなみに半角文字でもこの大きさになる。 bitmap.create(1, 100, 100) -- とりあえず、100×100のサイズで作る。 bitmap.create(2, 100, 100) -- やり方その1 font.tobitmap(1, 0, 0, string:byte("a"), 0xFFFFFFFF) -- 一文字だけ、"a"と書き込む -- やり方その2 font.draw(2, 0, 0, "日本語", 0xFFFFFFFF) -- 2byte文字混じり文の場合。
その1:font.tobitmapは半角一文字だけを対象とします。いわゆる2byte文字は文字化けしてしまいます。正直、使い道があるのかどうかは疑問です。tobitmapでできることはdrawでできますし、記述のしやすさもdrawの方が上だからです。
その2:二つに共通する第5引数はカラーコードですが、16進表記で6桁ではなく8桁の数値を使います。最も上位(左側)の二桁は、アルファー値を意味します。ですので、NScripterと同じ調子で6桁のカラーコードを使うと、アルファー値が0、完全透過になってしまい、文字が書き込まれているのに見えなくなってしまいます。
カラーコードについては、下記のような関数を使って対処するのがいいかも知れません。
-- 与えられた赤緑青アルファー値(0〜255)を一つのカラーコードにして返す。 function color_code(r, g, b, alpha) r = r or 255 g = g or 255 b = b or 255 alpha = alpha or 255 return alpha * 16777216 + r * 65536 + g * 256 + b end -- 各引数をnilや省略した場合、デフォルトとして255が採用される。
こうやって作ったbitmapを、texture.frombitmap()やtexture.copyrect()でtextureに変換し、それを表示することで文字が表示されます。
NScripterと違ってテキストウィンドウ等がありませんので、表示部分は完全に自作になります。頑張ってください。
余談ですが、0xFFFFFFFFは16進数で表記された数値ですので、ダブルクォート等は一切必要ありません。ですので、0xFFFFFFFFと表記しても4294967295と表記しても同じことです。さらに言うと、「0xで始まる文字列は16進数の数値である」と言うルールは各種別言語にも採用されていますので、覚えておいて損はありません。
フォントサイズについて
define({name="MS ゴシック", width=22, height=22})
このように記述した場合、半角文字であっても横幅が22ドットになってしまうので、半角英数字を表記する場合は、幅を半分にしたfontを作成して自由に切り替えられるようにするべきでしょう。