『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

はじめまして、sakamoto-kanadeと申します。

DirectXについての質問です。
言語はC++です。
スクエアエニックス様の代表作でもある、ドラゴンクエストの戦闘シーンのメッセージを再現したいと思います。

しかし、私のソースではメッセージが瞬間表示なってしまいます。
期待値では、1~2を繰り返すことです。
1) メッセージ表示
2) 2秒待ち

以下、現在のソースの状態です。
※重要な場所以外の処理は簡略しています。

DirectXで、メッセージを表示したまま処理をとめる場合はどうするのでしょうか?
それができない場合のロジックをご教授いただけないでしょうか?
よろしくお願いいたします。

TCHAR szMsg[MAX_PATH];
unsigned int iFlag= 0;
int iColorWhite = GetColor(255,255,255);

int WinMain()

  if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK, DxLib_Init() == -1 )return -1;
// メイン関数
  while( !ProcessMessage() && !ClearDrawScreen() )
  {
Zeromemory(szMsg, sizeof(szMsg));

srand((unsigned int)time(NULL));

// 0~2の乱数を発生
iFlag = 0 + (int)(rand() * (2-0+1.0)/(1.0+RAND_MAX));

Battle_Msg(iFlag, szMsg);
DrawFormatString( 20, 350, iColorWhite, _T("%s") ,szMsg);

ScreenFlip();
}

void Battle_Msg(int i, *szMsg)
{
if( i == 0){
_tcscpy( szMsg, _T("主人公の攻撃"));
}
if( i == 1){
_tcscpy( szMsg, _T("主人公の攻撃"));
}
if( i == 2){
_tcscpy( szMsg, _T("主人公の攻撃"));
}
// 一秒待つ
WaitTimer(2000);
return;
}
以上

A 回答 (1件)

それはDirectXそのものじゃなく、DirectXをラッパーして開発を容易にしたDXライブラリですね。


基本的にフレーム(1/60秒)毎に描画しないと行けないので、WaitTimer()を使うのは基本的に間違いです。フレーム数を120回カウントすれば2秒になりますね。

ここのサンプルを参考にしては?
「DXライブラリ置き場 サンプルプログラム」
http://homepage2.nifty.com/natupaji/DxLib/dxprog …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング