文字にフリガナを付ける方法(DxLib)
Posted: 2014年2月10日(月) 08:44
初めまして。periperiと申します。
現在DxLibを使用してノベルゲームプログラムを作成しています。
ゲーム内で画面にテキストを表示する際、特定の文字にフリガナを付ける処理を実装したいと考えています。
ただ実装をしようと思ったものの実際に作り始めると非常に手間がかかることが想像できるので、
まずは良い実装方法はないかと皆様にお尋ねしたいと思います。
まず、ベースとなる文字表示の機能は、ISLe様のブログ記事を参考にし、表示対象のテキストを外部ファイルから読み込むよう変更しています。
(ISLe様独自のフレームワークは使用しないようにしていますが、勉強段階なので、
それ以外はほぼ記事内のコードをそのまま使わせていただいています。
ISLe様、ありがとうございます。)
ISLeのビデオゲーム工房 ノベルゲーム風に一文字ずつ表示する
http://isle.cocolog-nifty.com/blog/2011 ... -794a.html
フリガナ付き文字列の記述は以下のような形を考えています。
案1. 単語に対し、自由な長さのフリガナを設定できる。
フリガナが長くなると、元となる文字の行間をフリガナの長さに応じて開ける必要が出てきます。
記述例. ぼくは[特急]{エクスプレス}に乗ったよ。
案2. 漢字1文字に対し、3文字までのフリガナを付けられるようにする。
直前の漢字に対するフリガナを記述します。
行間を調節する必要がないので案1よりは簡単ですが、4文字以上のフリガナが使用できなくなります。(スペースの問題で)
案1が難しく挫折した時に実装します。
記述例. ぼくは特{エクス}急{プレス}に乗ったよ。
ただ、どちらも対象の文字[]{}を探索し、その後フリガナの表示位置を計算する必要があり、
実装はそれなりに大変になることが予想できます。
(フリガナ用バッファも、どう作るのがベストなのかわかりませんし…)
私なら案1の方法が分からないので、案2を採用して、
フリガナのフォントサイズをベースとなるフォントの1/3にし、フリガナの無い文字の箇所にはスペースを埋め、
フリガナ対象の箇所のみに文字を入れたバッファを用意し、ベーステキストの1文字目の上から描画を始めます。
ただ、この方法ではベーステキストのフォントサイズか3の倍数でないと
フリガナの位置がずれてしまいます。
もしこのような仕組みを作られた方がいらっしゃれば、どう作ったのか、どう実装すべきなのか、
また参考にされたサイトやサンプルコードがありましたら、ご紹介いただけたらと思います。
長くなってしまいましたが、よろしくお願いします。
現在DxLibを使用してノベルゲームプログラムを作成しています。
ゲーム内で画面にテキストを表示する際、特定の文字にフリガナを付ける処理を実装したいと考えています。
ただ実装をしようと思ったものの実際に作り始めると非常に手間がかかることが想像できるので、
まずは良い実装方法はないかと皆様にお尋ねしたいと思います。
まず、ベースとなる文字表示の機能は、ISLe様のブログ記事を参考にし、表示対象のテキストを外部ファイルから読み込むよう変更しています。
(ISLe様独自のフレームワークは使用しないようにしていますが、勉強段階なので、
それ以外はほぼ記事内のコードをそのまま使わせていただいています。
ISLe様、ありがとうございます。)
ISLeのビデオゲーム工房 ノベルゲーム風に一文字ずつ表示する
http://isle.cocolog-nifty.com/blog/2011 ... -794a.html
フリガナ付き文字列の記述は以下のような形を考えています。
案1. 単語に対し、自由な長さのフリガナを設定できる。
フリガナが長くなると、元となる文字の行間をフリガナの長さに応じて開ける必要が出てきます。
記述例. ぼくは[特急]{エクスプレス}に乗ったよ。
案2. 漢字1文字に対し、3文字までのフリガナを付けられるようにする。
直前の漢字に対するフリガナを記述します。
行間を調節する必要がないので案1よりは簡単ですが、4文字以上のフリガナが使用できなくなります。(スペースの問題で)
案1が難しく挫折した時に実装します。
記述例. ぼくは特{エクス}急{プレス}に乗ったよ。
ただ、どちらも対象の文字[]{}を探索し、その後フリガナの表示位置を計算する必要があり、
実装はそれなりに大変になることが予想できます。
(フリガナ用バッファも、どう作るのがベストなのかわかりませんし…)
私なら案1の方法が分からないので、案2を採用して、
フリガナのフォントサイズをベースとなるフォントの1/3にし、フリガナの無い文字の箇所にはスペースを埋め、
フリガナ対象の箇所のみに文字を入れたバッファを用意し、ベーステキストの1文字目の上から描画を始めます。
ただ、この方法ではベーステキストのフォントサイズか3の倍数でないと
フリガナの位置がずれてしまいます。
もしこのような仕組みを作られた方がいらっしゃれば、どう作ったのか、どう実装すべきなのか、
また参考にされたサイトやサンプルコードがありましたら、ご紹介いただけたらと思います。
長くなってしまいましたが、よろしくお願いします。