フラグからタイマー起動

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

フラグからタイマー起動

#1

投稿記事 by こーり » 15年前

龍神録でボスを倒したら、フラグを立てて、
フラグがたったら、タイマーを実行し、
5秒後くらいに画像を表示するにはどうすればいいのでしょうか?
分かりにくくてすみません;;よろしく御願いします。
できればソースもお願いします。

バグ

Re:フラグからタイマー起動

#2

投稿記事 by バグ » 15年前

ボス倒す

Sleep(5000);

画像表示

シエル

Re:フラグからタイマー起動

#3

投稿記事 by シエル » 15年前

300カウントたってから画像表示。

dic

Re:フラグからタイマー起動

#4

投稿記事 by dic » 15年前

60FPSにして
シエルさんの言っているとおりに 60x5=300カウントして表示

Dixq (管理人)

Re:フラグからタイマー起動

#5

投稿記事 by Dixq (管理人) » 15年前

イベント管理係を作ってはどうでしょう。
その人に「ボスが倒れたから今から5秒数えてね」と通知したら、担当さんは5秒数えて発火してくれたらよいと思います。

本来は複数受け付けたりする必要があるでしょうが、例えば

typedef struct{
int Flag; //フラグ
int Kind; //起こすイベントの番号
int Count; //カウンタ
int Time; //イベントを起こすまでの時間
}Event_t;

こんな構造体を用意したとしましょう。
イベントを管理すべきかどうかのフラグ、起こすイベントの番号、カウンタと時間を持っています。
登録するイベントの数だけ線形リストに追加するような仕組みにすればflagは必要なくなります。

RegisterEvent( int Kind, int Time );

のような関数を用意して、イベントを登録します。

int RegisterEvent( int Kind, int Time ){
Event.Flag = 1;
Event.Kind=Kind;
Event.Count=0;
Event.Time=Time;
return xx;
}

登録作業はこんな感じですかね。
後は

int CalcEvent(){
if( Event.Flag==1 ){
カウンタを加算
カウンタが時間になれば
登録してあるイベントを発火();
}
return xx;
}

こんな計算をする関数を毎度呼べばよいと思います。
イベントは線形リストなどにすると良いでしょう。

こーり

Re:フラグからタイマー起動

#6

投稿記事 by こーり » 15年前

ん~・・・皆さんすごいですね・・
そんなこと言われてもチンプンカンプンというか・・・
まったくわかりません・・・;;

array

Re:フラグからタイマー起動

#7

投稿記事 by array » 15年前

> まったくわかりません・・・;;

皆さん優しいので、何が分らないのか具体的に示してもらえれば
別の切り口からの解説などが望めるかもしれません。

解答者側から見たら、全部分らないと言われると、何から解説すれば良いのか
困ってしまいます。

事実、管理人さんの解答ではこーりさんには難しすぎたようですし

全部分らないというより、分る部分はある程度コードを書いて
行き詰った部分を質問した方がいいのでは?

こーり

Re:フラグからタイマー起動

#8

投稿記事 by こーり » 15年前

そうですね・・・;;
では、管理人さんのおっしゃっている、
>RegisterEvent( int Kind, int Time );

のような関数を用意して、イベントを登録します。

とは、どうやって登録をすればいいのでしょうか?

softya

Re:フラグからタイマー起動

#9

投稿記事 by softya » 15年前

すいません基本的なことをお聞きします。
関数の作り方と呼び出し方は理解されていますか?

こーり

Re:フラグからタイマー起動

#10

投稿記事 by こーり » 15年前

恥ずかしながら、初歩的なところを浅くわかっているくらいです。
呼び出し方は、関数名(引数 );だと思います。
作り方はたとえば、 型 sample(引数){処理} 
これに、関数は何かを処理するためのものだから、
{
  a=5+5;
}
これで一個の関数
型 sample(引数)
{
  a=1+1;
}


で、管理人さんは、int型を前につけていらっしゃるので
return 関数値;
関数値がxxということで、たとえば、関数値が5だとすると
int keisan(引数)
{
  return 5;

ということだと思います。

そして引数は、
例えば、

int sample( )
{
}
void main( )
{
}
という関数を定義したとして、
これに、引数を入れると
int sample(int num)
{
}
void main( )
{
  sample(10);
}
以上のことくらいしかわかりませんが・・

softya

Re:フラグからタイマー起動

#11

投稿記事 by softya » 15年前

ありがとうございます。
関数の基本的な事は理解されますね。

Dixq (管理人)さんの書かれた関数を簡単に説明してみますね。

●時限イベントを登録する関数です。
RegisterEvent( int Kind, int Time );
Kindにイベントの種類番号(自分で決めてください)、Timeにイベント発動までの時間(フレーム数)を登録します。この関数を呼ぶのは、時限イベントを設定したいタイミングです。

●イベントのタイミングを計算する関数です。
int CalcEvent(){
メインのループのどこかで呼び出しておきます。
中身が完成していないので関数の中身を自分で書く必要があります。
//カウンタを加算
Event.Count++;
//カウンタが時間になれば
if( Event,Count >= Event.Time ) {
//イベント停止
Event.Flag = 0;
//登録してあるイベントを発火();
if( Event.Kind==自分で決めたイベントの種類番号 ) {
//イベント処理の呼び出し(何をするかは自分で決めてください)
}

こーり

Re:フラグからタイマー起動

#12

投稿記事 by こーり » 15年前

あ、なるほど
やっとわかりました。
いろいろ手間取らせちゃってすみませんでした。
ありがとうございました。

Dixq (管理人)

Re:フラグからタイマー起動

#13

投稿記事 by Dixq (管理人) » 15年前

softyaさん、ご説明ありがとうございます。

> こーりさん

いきなり具体的なプログラムで少し解りにくかったかもしれません。
上にも書いた通り、イベントドリブンではない設計のゲームプログラムで、○秒後にイベントを発生させるという処理をしたい時は、カウンタをカウントアップさせて時間をはかり、設定したイベントを発火させるのが良いと思います。
その方法は上の方法でなくてもよいと思うので、まずは自分の思うようにプログラムを書いてみるのが良いと思います。
自分に最も合う良い方法は試行錯誤の中で見つけていくのが一番だと思いますので。

閉鎖

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