指定した時間でのファイル切り替えが上手くできません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ポッキー

指定した時間でのファイル切り替えが上手くできません。

#1

投稿記事 by ポッキー » 8年前

初めまして。現在、DXライブラリを用いてプログラムを書いている初心者です。
質問内容は件名の通りです。
今現在書いているプログラムは、DXライブラリのサイトなどを見ながらファイルを分割して作っています。
具体的には、あるファイルでキークリックをしたら次のファイル(文字列が描画される)が描画され、3秒間経過すると自動的にまた次のファイルにうつるというプログラムを書くことが目的です。
しかし次のファイルへ切り替わる時、キークリックをしてからそれまでのファイルがさらに3秒間描画されて画面が次のファイルに切り替わってしまいます。
コンパイルエラーなどは一切起こりません。

CやC++言語の基礎知識はあり、DXライブラリ関係のサイトも一通り閲覧したのですが、解決できずにいます。
どなたか原因のわかる方がいましたら、ご教示くださると助かります。

PC環境は、
OS: windows7 home premium
コンパイラ: VC++ 2008
です。

以下不具合のある2つのファイルです。最初のファイルはプログラム全体の2つ目のファイルで、次が3つ目のファイルです。

コード:

#include "cstdlib"
#include "iostream"
#include "DxLib.h"
#include "string"
#include "Test1.h"
using namespace std;


extern int function_status;

void inst(){
	
	
	int White1 = GetColor(255,255,255);
	int Font1;
        Font1  = CreateFontToHandle( "MS ゴシック", 50,  9, DX_FONTTYPE_NORMAL );

	DrawFormatString(210, 220, White1, "あいうえお", Font1);
	

	if(CheckHitKey(KEY_INPUT_SPACE) == 1)
                function_status=2;
}

コード:

#include "cstdlib"
#include "iostream"
#include "DxLib.h"
#include "string"
#include "Test1.h"
using namespace std;

extern int function_status;


void wai(){
	
	int  wtime1;
	int White3 = GetColor(255,255,255);
	int Font3;
        Font3  = CreateFontToHandle( "MS ゴシック", 50,  9, DX_FONTTYPE_NORMAL );

	wtime1 = GetNowCount();

	while((  GetNowCount() - wtime1) <= 3000){
		DrawFormatString(210, 220, White3, "かきくけこ", Font3);
	}
	
	
		function_status = 3 ;

}

アバター
パコネコ
記事: 139
登録日時: 9年前
住所: 大阪

Re: 指定した時間でのファイル切り替えが上手くできません。

#2

投稿記事 by パコネコ » 8年前

おそらくですが、

コード:

while((  GetNowCount() - wtime1) <= 3000){
        DrawFormatString(210, 220, White3, "かきくけこ", Font3);
}
が、悪いのではないでしょうか。
3秒間ここのループで、止まってしまってからループを抜けて、描写処理に入っているのではないでしょうか?
ここのループ中は、描写処理が行われていないため3秒間のズレが起こるのではないでしょうか?

なにか勘違い等ありましたら申し訳ございませんが。
ニャン!!\(゜ロ\)(/ロ゜)/

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: 指定した時間でのファイル切り替えが上手くできません。

#3

投稿記事 by softya(ソフト屋) » 8年前

時間で待つ処理をしてはいけません。
「補足資料.11章 書いてはいけない4つの処理」
http://dixq.net/g/h_11.html
ここの「不適切な実装2. WaitやSleepを行っている」と同等の行為です。
必ずScreenFlipの処理に戻る処理に作り変えてフレーム数のカウントで3秒ですから3*60フレームをカウントして待つようにして下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ポッキー

Re: 指定した時間でのファイル切り替えが上手くできません。

#4

投稿記事 by ポッキー » 8年前

パコネコさん、softyaさん、while文をフレーム処理で書き直したところ、目的通り動き、解決いたしました。
本当に助かりました。どうもありがとうございます。
もっと勉強してみます。

閉鎖

“C言語何でも質問掲示板” へ戻る