ページ 1 / 1
ある特定の時間になった時だけ処理を実行する方法
Posted: 2015年12月30日(水) 09:58
by たかひろ
おはようございます。
現在ゲームの作成において特定の時間になった時だけ処理を実行させたいと思っていますがなかなか上手にいきませんでした。
(例:10秒間経過したら処理を実行する。その処理の後また10秒間経過したら同じ処理をする)
まったく手も足も出ないのでよろしくお願いします。。。
Re: ある特定の時間になった時だけ処理を実行する方法
Posted: 2015年12月30日(水) 11:13
by みけCAT
まず、使用したいプラットフォーム(PC/AT互換機、市販のゲーム機(PSPなど)、マイコン(CPUと周辺回路は?)など)、
OS(あれば)、プログラミング言語を教えてください。
上手にいかないコードがあり、公開してもよいのであれば、それも提示してください。
Re: ある特定の時間になった時だけ処理を実行する方法
Posted: 2015年12月30日(水) 13:50
by softya(ソフト屋)
時計がある機種なら、初期化で現在の時間を変数に入れて+10秒します。
その変数を現在の時間が超えれば、10秒経過したことが分かりますので、目的の処理をしてください。
その処理するときに、その変数に現在の時間+10秒を入れれば次の10秒後に処理できます。
と繰り返したら、目的のことが出来ると思います。
Re: ある特定の時間になった時だけ処理を実行する方法
Posted: 2015年12月30日(水) 17:57
by たかひろ
すいませんでした。確かに何も情報を書いてないと元も子もないですもんね。
使用している言語はc言語でDxライブラリを使用しています(厳密にはc++ですがc++はかけないのでよろしければc言語でお願いします)
みけCAT さんが書きました:まず、使用したいプラットフォーム(PC/AT互換機、市販のゲーム機(PSPなど)、マイコン(CPUと周辺回路は?)など)、
OS(あれば)、プログラミング言語を教えてください。
上手にいかないコードがあり、公開してもよいのであれば、それも提示してください。
Re: ある特定の時間になった時だけ処理を実行する方法
Posted: 2015年12月30日(水) 18:17
by みけCAT
どのくらいの精度が必要ですか?
「だいたい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;
}
Re: ある特定の時間になった時だけ処理を実行する方法
Posted: 2015年12月30日(水) 21:14
by たかひろ
お二人ともご親切にありがとうございました。
おかげさまで何とかなりました
Re: ある特定の時間になった時だけ処理を実行する方法
Posted: 2016年1月01日(金) 08:03
by プラム
みけさんの方法だと。精密ではありますが。ゲームでの実装には向いてないかと思います。
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