ARGENTO CUORE

 May the code be with you.

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2009.12.12[土] ビットマップフォント表示

他のライブラリに依存していると、それがダイナミックリンクの場合、単にゲームで遊びたいだけなのによくわからないパッケージをインストールしなきゃいけなくなるっていうのは嫌だなぁーと思って、できるだけ外部ライブラリを使わずにしたいと思う今日この頃。

今作っているゲーム+ゲームライブラリは、SDLのみで動くようにしたいと思ってます。
実際には実行時にRubyが必要になるから敷居が高いかも……。
配布時にRubyを同梱するのは良いのかな? rubyスクリプトからexe形式の実行ファイルを作成できるプログラムもあったので、それを使う+SDL.dllを同梱が一番かなぁ……。
でも、Linuxで開発してるから、Windowsに今のままもっていったら不具合出そう……。


で、ビットマップフォントを少し表示していたけれど、漢字まで対応しました。
当初の予定?では、あらかじめ他のファイル(テキスト)に使用する漢字を書いておいて、実行時にそこから必要な文字を取得&ビットマップデータから取り出してきて表示するという流れにしようかなと思っていたけれど、わざわざ使う前に書くのも面倒だし、パソコンたくさんメモリあるし、全部読み込んでおこうと思い、UTF-8のお勉強からはじめることにしました。

以下、日本語+英語表示に必要そうな部分だけ一覧

[格納ファイル] -> コード範囲 - 言語地域:文字種(補足)
font4x8 -> 0020~007F - ヨーロッパ:基本ラテン文字(アルファベット)
font4x8 -> FF66~FF9F - 記号・句読点:全角・半角形(半角片仮名)

font2.bmp -> 0080~00FF - ヨーロッパ:ラテン1追加
font2.bmp -> 2000~206F - 記号・句読点:一般句読点

※font3.bmpは3000~FAFFまで連続して格納している
font3.bmp -> 3000~303F - 東アジア:CJKの記号及び句読点(かぎ括弧その他)
font3.bmp -> 3040~309F - 東アジア:平仮名
font3.bmp -> 30A0~30FF - 東アジア:片仮名
font3.bmp -> 31C0~31EF - 東アジア:CJK字画
font3.bmp -> 3300~33FF - 東アジア:CJK互換用文字(各種単位、元号、日付等)
font3.bmp -> 4E00~9FFF - 東アジア:CJK統合漢字
font3.bmp -> F900~FAFF - 東アジア:CJK互換漢字

font4.bmp -> FF00~FF65 - 記号・句読点:半角・全角形(全角英数、半角片仮名)

こういう感じで、半角のもの、記号1、日本語、記号2という4つのビットマップファイルを作成し、
それぞれをバッファに読み込んでおいて、表示時にとってくるという形にしました。
美咲フォントで出力した場合、漢字などが穴ぼこだらけですが、あんまりたぶん使わない漢字だからないんだろうなーと思って気にしない。

ビットマップ出力スクリプトはRuby/sdlで書きました。SDLのサーフェス保存メソッドを使ったので楽~。
コードは以下のような感じに。firstとlastに表示する文字のコードの最初と終わりを渡します。

~省略~
16 def draw(first,last,font,screen)
17 x = $x
18 y = $y
19 first.upto(last) do |uc|
20 str = [uc].pack('U')
21 puts uc.to_s(16)
22 font.draw_solid_utf8(screen,str,x,y,255,255,255)
23 if x == WIN_W-FONT_WIDTH then
24 x = 0
25 y = y + FONT_HEIGHT
26 else
27 if uc.between?(0x0020,0x007F) or uc.between?(0xFF66,0xFF9F) then
28 x = x + FONT_WIDTH/2
29 else
30 x = x + FONT_WIDTH
31 end
32 end
33 end
34 $x = x
35 $y = y
36 end
~省略~

表示時には、
<初期化>
できたビットマップフォントを読み込み、文字をキーとして渡すハッシュを作成して、その中にビットマップ中の対象文字のX、Y座標データを格納
<描画>
渡された文字をキーとして初期化時に作ったハッシュへと渡し、指定された座標のビットマップ情報を取得。表示サーフェスへと転送

という感じにしてます。
とりあえず表示ー。
フォント表示。試しに実行
FPS50なのは気にしない(ぁ
スポンサーサイト

Comment






(編集・削除用)


管理者にだけ表示を許可

Trackback

http://ronor.blog81.fc2.com/tb.php/15-530e07a4

この記事にトラックバック(FC2Blog User)

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

Author:RoNor
得意呪文はScalaですって言えるようになるのが夢です。
デスマーチ中、パーティメンバーの防御力を向上させたりさせなかったり。

検索フォーム

QRコード

QRコード

Copyright © 2009-2010 ARGENTO CUORE and RoNor All rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。