Admin * New entry * Up load * All archives 

C++&DirectXでプチプチゲーム制作をしています。文章力?気合で乗り越えるさ。

 

旧 ゲーム的な何か。

05«1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.»07
このページの記事一覧

    

Posted on --:--:-- «edit»

Category:スポンサー広告

スポンサーサイト 

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

tb: --     com: --

go page top

Posted on 16:06:57 «edit»

Category:異境

とりあえず文字列表示 

ようやく気合が入ってきました。Signalです。
前の記事を書いた後しばらく試行錯誤していたのですが、思わぬ形で解決しました。

void CreateFontString(string s, int fontType, float px, float sp, float py, DWORD size, DWORD color)
{

string sBuffer;
unsigned int i = 0;
int space = 0;

while(i
sBuffer = s.substr(i,1);
const char* c = _strdup( sBuffer.c_str() );

//2バイト文字であるかの判定(上でまず1バイトだけ抜き出して判定ようにchar型のを作る)
if (isJapaneseCharacter(*c) == 1){
//2バイト分抜き出し
sBuffer = s.substr(i,2);
i+=2;
CreateFontChar(sBuffer, fontType, px + space, py, size, color);
space += sp;
} else {
//1バイト分抜き出し(そのまま)
i++;
CreateFontChar(sBuffer, fontType, px + space, py, size, color);
space += (sp / 2);
}
}
}

CreateFontCharは、string型の文字を入力することでその文字の画像を大きさに合わせ作成、表示してくれます。
今回文字列を分割して1文字ごとに画像を作成するように作っていたのですが、substr()が1バイトごとにしか区切ってくれないので、2バイト文字を認識してそのときは2バイト分分割する必要があったわけです。
非常に不器用なコードではありますが、こんな感じでコードを分割しています。

①文字列の1バイト目を抜き出す(char*型に変換)
②isJapaneseCharacter(char*)で2バイト文字かどうか判定
↑は別に作った関数で、2バイト文字なら1、1バイト文字なら0を返します。
SHIFT_JISの2バイト文字では,第一バイトが0x81~0x9fまたは0xe0~0xfcの範囲にあるのを利用しています。
③2バイト文字ならバッファに2バイト分ロード、画像作成、1バイト文字ならそのまま画像作成
④半角、全角に合わせて表示部を調整、次のバイトを①から続ける

こんな感じですね。コードはいらなかったかも知れません。

とりあえず目に見える成果はこちら。ふと見つけたので今年の正月ごろに作っていたプログラムのスクショと一緒に。タイトルは相変わらずです。
フォントー表示するだけ

7か月でようやくここまで来たか、といったところです。人より進歩は遅いので、この夏に一気に進めたいですね。

ではでは。

テーマ: プログラミング

ジャンル: コンピュータ

go page top

 この記事に対するコメント 

go page top

 コメント投稿 
Secret

go page top

 トラックバック 
トラックバックURL
→http://frontiersman.blog61.fc2.com/tb.php/153-da4721d4
この記事にトラックバックする(FC2ブログユーザー)

go page top

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