ある特定の時間になった時だけ処理を実行する方法

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

ある特定の時間になった時だけ処理を実行する方法

#1

投稿記事 by たかひろ » 4年前

おはようございます。

現在ゲームの作成において特定の時間になった時だけ処理を実行させたいと思っていますがなかなか上手にいきませんでした。
(例:10秒間経過したら処理を実行する。その処理の後また10秒間経過したら同じ処理をする)

まったく手も足も出ないのでよろしくお願いします。。。

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: ある特定の時間になった時だけ処理を実行する方法

#2

投稿記事 by みけCAT » 4年前

まず、使用したいプラットフォーム(PC/AT互換機、市販のゲーム機(PSPなど)、マイコン(CPUと周辺回路は?)など)、
OS(あれば)、プログラミング言語を教えてください。
上手にいかないコードがあり、公開してもよいのであれば、それも提示してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: ある特定の時間になった時だけ処理を実行する方法

#3

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

時計がある機種なら、初期化で現在の時間を変数に入れて+10秒します。
その変数を現在の時間が超えれば、10秒経過したことが分かりますので、目的の処理をしてください。
その処理するときに、その変数に現在の時間+10秒を入れれば次の10秒後に処理できます。
と繰り返したら、目的のことが出来ると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たかひろ
記事: 2
登録日時: 4年前

Re: ある特定の時間になった時だけ処理を実行する方法

#4

投稿記事 by たかひろ » 4年前

すいませんでした。確かに何も情報を書いてないと元も子もないですもんね。
使用している言語はc言語でDxライブラリを使用しています(厳密にはc++ですがc++はかけないのでよろしければc言語でお願いします)
みけCAT さんが書きました:まず、使用したいプラットフォーム(PC/AT互換機、市販のゲーム機(PSPなど)、マイコン(CPUと周辺回路は?)など)、
OS(あれば)、プログラミング言語を教えてください。
上手にいかないコードがあり、公開してもよいのであれば、それも提示してください。

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: ある特定の時間になった時だけ処理を実行する方法

#5

投稿記事 by みけCAT » 4年前

どのくらいの精度が必要ですか?
「だいたい10秒ごと」でよければ、例えば

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE);
	DxLib_Init();
	SetDrawScreen(DX_SCREEN_BACK);

	unsigned int interval = 1000 * 10; // 間隔[ms]

	unsigned int prevTime = (unsigned int)GetNowCount(); // 前回処理をした時刻
	while(Processmessage() == 0 && ClearDrawScreen() == 0) {
		unsigned int currentTime = (unsigned int)GetNowCount(); // 現在時刻
		if (currentTime - prevTime >= interval) { // 前回の処理から指定した時間が経ったら
			// 処理をする
			prevTime = (unsigned int)GetNowCount(); // 処理をし終わった時刻を記録
		}
		ScreenFlip();
	}
	
	DxLib_End();
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たかひろ
記事: 2
登録日時: 4年前

Re: ある特定の時間になった時だけ処理を実行する方法

#6

投稿記事 by たかひろ » 4年前

お二人ともご親切にありがとうございました。
おかげさまで何とかなりました

アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

Re: ある特定の時間になった時だけ処理を実行する方法

#7

投稿記事 by プラム » 4年前

みけさんの方法だと。精密ではありますが。ゲームでの実装には向いてないかと思います。

DxLibはPCのスペックにもよりますが、基本的には60FPS安定なので、一秒は60フレームですね(FPSというのは、一秒に何回処理をするかという数値です

それほど精密性を求めなくてもいい場合は。以下のようなコードのほうが適切かと。

コード:

#include <DxLib.h>
 
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE);
    DxLib_Init();
    SetDrawScreen(DX_SCREEN_BACK);
    int count;
    
    while(Processmessage() == 0 && ClearDrawScreen() == 0) {
               
            count++;               //カウンターを加算
 
                 if(count%600==0){                   //もし、カウンターを600で割った余りが0であるなら            
                               
                               //ここに処理を追加
                 }
        ScreenFlip();
    }
    
    DxLib_End();
    return 0;
}
このようなコードでどうでしょうか。

Fpsについてはこちらを参照
http://dixq.net/g/03_14.html

閉鎖

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