oyagameで日本語を使う
2008年5月30日
oyagameで日本語を表示するのは、意外と簡単であることが分かった。これに気がつくのを難しくしていた原因は、私の今のPC環境でShift-JISがうまく使えなかったことにあった。
OSで日本語がちゃんと使える環境になると、oyagameでの日本語表示は簡単。
SDL_ttfではUNICODEを用いれば日本語表示ができることが、わかっていた。もともと、COMの呼び出しでは文字列としてUNICODEが使われており、Shift-JISからUNICODEへの変換は自動的にWSHがしてくれるので、先の記事のような難しいことをする必要は一切無かった。上記テストスクリプトのソースコードは以下のとおり。
一箇所だけ工夫しないといけない点がある。上記ソースコードからその部分だけピックアップしたのが、下。
OSで日本語がちゃんと使える環境になると、oyagameでの日本語表示は簡単。
SDL_ttfではUNICODEを用いれば日本語表示ができることが、わかっていた。もともと、COMの呼び出しでは文字列としてUNICODEが使われており、Shift-JISからUNICODEへの変換は自動的にWSHがしてくれるので、先の記事のような難しいことをする必要は一切無かった。上記テストスクリプトのソースコードは以下のとおり。
set SDL=CreateObject("sfcmini.oyagame") execute SDL.ConstVBS SDL.Init(SDL_INIT_EVERYTHING) set surface=SDL.SetVideoMode(200,100,32,SDL_HWSURFACE+SDL_DOUBLEBUFF) set TTF=CreateObject("sfcmini.oyagame") call TTF.LoadLibrary("SDL_ttf.dll","TTF_") TTF.Init() font=TTF.OpenFont("c:\windows\fonts\msgothic.ttc",16) call TTF.LoadLibraryW("SDL_ttf.dll","TTF_") text=TTF.RenderUNICODE_Solid(font,"もしもし亀よ、親亀さん!",&Hffffff) set text=SDL.CreateStructure("SDL_Surface",text) set ev=SDL.CreateStructure("SDL_Event") call SDL.BlitSurface(text,0,surface,text.clip_rect) SDL.Flip(surface) do SDL.WaitEvent(ev) loop until ev.type=SDL_QUIT
一箇所だけ工夫しないといけない点がある。上記ソースコードからその部分だけピックアップしたのが、下。
call TTF.LoadLibrary("SDL_ttf.dll","TTF_") TTF.Init() font=TTF.OpenFont("c:\windows\fonts\msgothic.ttc",16) call TTF.LoadLibraryW("SDL_ttf.dll","TTF_")まずLoadLibrary()でライブラリ呼び出しを行い、Init()とOpenFont()を行った後、LoadLibraryW()でもう一度ライブラリ呼び出しを行っている。このような煩雑な手続きになるのはOpenFont()ではANSI文字列を、RenderUNICODE_Solid()ではUNICODE文字列を使わないといけないためである。今のoyagameの仕様では、この手続きを覚えるしかない。Pygame互換のインターフェースを整備すれば、もっと簡単に日本語が使えるようになるだろう。