よくあるサウンドノベルみたいなことがしたいんですね。
cola119さんのコードを見るに、DXライブラリの基本的な考え方が違う気がします。
DXライブラリは毎フレーム全消し全描きをするのが一般的です。
しなくても出来ますが、今後の拡張性を考えると裏画面処理をして全描きするのがよいでしょう。
DXライブラリの基礎については
http://dixq.net/g/ こちらを参考にして下さい。
サンプル作ってみました。こんなのでどうでしょう。
コード:
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
int counter = 0, pos = 0;
char *buf = "WelcomeABCDEFGDEFGWelcomeABCDEFGDEFG";
char str[256]={};
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
DrawString( 0, 0, str, GetColor(255,255,255) );
if( counter % 3 == 0 ){ // 1/20秒に一度(3カウントに一度)
if( buf[ pos ] != '\0' ){ // 終端じゃなければ
str[ pos ] = buf[ pos ];// 1文字コピー
str[ pos + 1 ] = '\0'; // 終端付ける
pos++; // 文字位置進める
}
}
counter++;
}
DxLib_End();
return 0;
}
あくまでサンプルなので、実際はバッファオーバーランなどに気を配ったコードにして下さい。
逆に1文字ずつ消したいのであれば・・。
コード:
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
int Counter = 0, pos = 0, x = 0;
char *str = "WelcomeABCDEFGDEFGWelcomeABCDEFGDEFG";
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
DrawString( x, 100, &str[pos], GetColor(255,255,255) );
if( Counter % 5 == 0 ){ // 1/12秒に一度(5カウントに一度)
if( str[ pos+1 ] != '\0' ){ //次が終端記号じゃなければ
pos++; //文字位置を進める
x += 9; //表示位置を進める
}
}
Counter++;
}
DxLib_End();
return 0;
}
こんな感じでしょうか。
softyaさんが仰るように多バイト文字があれば、その処理は別にしないといけません。