こんばんは。
今、ゲームプログラミングの館などを参考にして文字をノベルゲーム風に表示させる関数を作っているのですが、文字の表示がおかしなことになって文字が表示されません・・・。
どうしたらいいか教えてください。
詳しくはファイルを添付するので、そちらを参照してください。
文字の表示が・・・
Re:文字の表示が・・・
>どうしたらいいか教えてください
まず、one_moji_bufの一文字しか表示しない、というところを直してください。
画面はメインループの ClearDrawScreen()によって毎フレーム綺麗さっぱり全て消去されます。
従って、表示したい文字は全て毎フレーム表示し直す必要があります。
そのあたりに注意して直してみてください。
Re:文字の表示が・・・
> まず、one_moji_bufの一文字しか表示しない、というところを直してください。
すいません、具体的にどうしたらいいかアドバイスだけでも教えてもらえませんか^^;
すいません、具体的にどうしたらいいかアドバイスだけでも教えてもらえませんか^^;
Re:文字の表示が・・・
一文字だけ表示して終わり、にしないで、指定された文字数目までを切り出した文字列を作ってください。
たとえば「あいうえおかきくけこ」という文字列があるとき、3文字目まで、なら「あいう」を、
5文字目までなら「あいうえお」となるように。
これは大元の文字列から切り出せばいいでわけですが、切り出す際に改行や画面外判定などを
入れて必要に応じて改行をします。
その改行の際に、切り出した文字列を表示すればいいかと思います。
以下はサンプルです。
[color=#d0d0ff" face="monospace]
void writetring( int X, int Y, CString CS, int color )
{
CString s;
int yOffset = 0;
for(int n=0; n<cp; n+=2)
{
bool draw = false;
bool cr = false;
if(CS[n] == 'K')
{
cp++;
++n;
cr = draw = true;
}
else
if(CS[n] == '\0' || CS[n] == 'E')
{
end_flag = 1;
draw = true;
}
else
{
char t[/url] = { CS[n], CS[n+1], '\0' };
s += t;
if(X + GetDrawStringWidth(s.GetString(), s.GetLength(), 0)> 640 - MOJI_SIZE)
cr = draw = true;
if(n + 2 >= cp)
draw = true;
}
if(draw)
{
DrawString( X , Y + yOffset, s.GetString() , color );
s.Clear();
}
if(cr)
yOffset += 16;
}
if(!end_flag)
cp += 2;
}
[/color]
たとえば「あいうえおかきくけこ」という文字列があるとき、3文字目まで、なら「あいう」を、
5文字目までなら「あいうえお」となるように。
これは大元の文字列から切り出せばいいでわけですが、切り出す際に改行や画面外判定などを
入れて必要に応じて改行をします。
その改行の際に、切り出した文字列を表示すればいいかと思います。
以下はサンプルです。
[color=#d0d0ff" face="monospace]
void writetring( int X, int Y, CString CS, int color )
{
CString s;
int yOffset = 0;
for(int n=0; n<cp; n+=2)
{
bool draw = false;
bool cr = false;
if(CS[n] == 'K')
{
cp++;
++n;
cr = draw = true;
}
else
if(CS[n] == '\0' || CS[n] == 'E')
{
end_flag = 1;
draw = true;
}
else
{
char t[/url] = { CS[n], CS[n+1], '\0' };
s += t;
if(X + GetDrawStringWidth(s.GetString(), s.GetLength(), 0)> 640 - MOJI_SIZE)
cr = draw = true;
if(n + 2 >= cp)
draw = true;
}
if(draw)
{
DrawString( X , Y + yOffset, s.GetString() , color );
s.Clear();
}
if(cr)
yOffset += 16;
}
if(!end_flag)
cp += 2;
}
[/color]