おはようございます。
現在ゲームの作成において特定の時間になった時だけ処理を実行させたいと思っていますがなかなか上手にいきませんでした。
(例:10秒間経過したら処理を実行する。その処理の後また10秒間経過したら同じ処理をする)
まったく手も足も出ないのでよろしくお願いします。。。
ある特定の時間になった時だけ処理を実行する方法
Re: ある特定の時間になった時だけ処理を実行する方法
まず、使用したいプラットフォーム(PC/AT互換機、市販のゲーム機(PSPなど)、マイコン(CPUと周辺回路は?)など)、
OS(あれば)、プログラミング言語を教えてください。
上手にいかないコードがあり、公開してもよいのであれば、それも提示してください。
OS(あれば)、プログラミング言語を教えてください。
上手にいかないコードがあり、公開してもよいのであれば、それも提示してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: ある特定の時間になった時だけ処理を実行する方法
時計がある機種なら、初期化で現在の時間を変数に入れて+10秒します。
その変数を現在の時間が超えれば、10秒経過したことが分かりますので、目的の処理をしてください。
その処理するときに、その変数に現在の時間+10秒を入れれば次の10秒後に処理できます。
と繰り返したら、目的のことが出来ると思います。
その変数を現在の時間が超えれば、10秒経過したことが分かりますので、目的の処理をしてください。
その処理するときに、その変数に現在の時間+10秒を入れれば次の10秒後に処理できます。
と繰り返したら、目的のことが出来ると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ある特定の時間になった時だけ処理を実行する方法
すいませんでした。確かに何も情報を書いてないと元も子もないですもんね。
使用している言語はc言語でDxライブラリを使用しています(厳密にはc++ですがc++はかけないのでよろしければc言語でお願いします)
使用している言語はc言語でDxライブラリを使用しています(厳密にはc++ですがc++はかけないのでよろしければc言語でお願いします)
みけCAT さんが書きました:まず、使用したいプラットフォーム(PC/AT互換機、市販のゲーム機(PSPなど)、マイコン(CPUと周辺回路は?)など)、
OS(あれば)、プログラミング言語を教えてください。
上手にいかないコードがあり、公開してもよいのであれば、それも提示してください。
Re: ある特定の時間になった時だけ処理を実行する方法
どのくらいの精度が必要ですか?
「だいたい10秒ごと」でよければ、例えば
「だいたい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で殴ればいい!(死亡フラグ)
Re: ある特定の時間になった時だけ処理を実行する方法
みけさんの方法だと。精密ではありますが。ゲームでの実装には向いてないかと思います。
DxLibはPCのスペックにもよりますが、基本的には60FPS安定なので、一秒は60フレームですね(FPSというのは、一秒に何回処理をするかという数値です
それほど精密性を求めなくてもいい場合は。以下のようなコードのほうが適切かと。
このようなコードでどうでしょうか。
Fpsについてはこちらを参照
http://dixq.net/g/03_14.html
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