フラグからタイマー起動
フラグからタイマー起動
龍神録でボスを倒したら、フラグを立てて、
フラグがたったら、タイマーを実行し、
5秒後くらいに画像を表示するにはどうすればいいのでしょうか?
分かりにくくてすみません;;よろしく御願いします。
できればソースもお願いします。
フラグがたったら、タイマーを実行し、
5秒後くらいに画像を表示するにはどうすればいいのでしょうか?
分かりにくくてすみません;;よろしく御願いします。
できればソースもお願いします。
Re:フラグからタイマー起動
イベント管理係を作ってはどうでしょう。
その人に「ボスが倒れたから今から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;
}
こんな計算をする関数を毎度呼べばよいと思います。
イベントは線形リストなどにすると良いでしょう。
その人に「ボスが倒れたから今から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:フラグからタイマー起動
> まったくわかりません・・・;;
皆さん優しいので、何が分らないのか具体的に示してもらえれば
別の切り口からの解説などが望めるかもしれません。
解答者側から見たら、全部分らないと言われると、何から解説すれば良いのか
困ってしまいます。
事実、管理人さんの解答ではこーりさんには難しすぎたようですし
全部分らないというより、分る部分はある程度コードを書いて
行き詰った部分を質問した方がいいのでは?
皆さん優しいので、何が分らないのか具体的に示してもらえれば
別の切り口からの解説などが望めるかもしれません。
解答者側から見たら、全部分らないと言われると、何から解説すれば良いのか
困ってしまいます。
事実、管理人さんの解答ではこーりさんには難しすぎたようですし
全部分らないというより、分る部分はある程度コードを書いて
行き詰った部分を質問した方がいいのでは?
Re:フラグからタイマー起動
そうですね・・・;;
では、管理人さんのおっしゃっている、
>RegisterEvent( int Kind, int Time );
のような関数を用意して、イベントを登録します。
とは、どうやって登録をすればいいのでしょうか?
では、管理人さんのおっしゃっている、
>RegisterEvent( int Kind, int Time );
のような関数を用意して、イベントを登録します。
とは、どうやって登録をすればいいのでしょうか?
Re:フラグからタイマー起動
恥ずかしながら、初歩的なところを浅くわかっているくらいです。
呼び出し方は、関数名(引数 );だと思います。
作り方はたとえば、 型 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);
}
以上のことくらいしかわかりませんが・・
呼び出し方は、関数名(引数 );だと思います。
作り方はたとえば、 型 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);
}
以上のことくらいしかわかりませんが・・
Re:フラグからタイマー起動
ありがとうございます。
関数の基本的な事は理解されますね。
Dixq (管理人)さんの書かれた関数を簡単に説明してみますね。
●時限イベントを登録する関数です。
RegisterEvent( int Kind, int Time );
Kindにイベントの種類番号(自分で決めてください)、Timeにイベント発動までの時間(フレーム数)を登録します。この関数を呼ぶのは、時限イベントを設定したいタイミングです。
●イベントのタイミングを計算する関数です。
int CalcEvent(){
メインのループのどこかで呼び出しておきます。
中身が完成していないので関数の中身を自分で書く必要があります。
//カウンタを加算
Event.Count++;
//カウンタが時間になれば
if( Event,Count >= Event.Time ) {
//イベント停止
Event.Flag = 0;
//登録してあるイベントを発火();
if( Event.Kind==自分で決めたイベントの種類番号 ) {
//イベント処理の呼び出し(何をするかは自分で決めてください)
}
関数の基本的な事は理解されますね。
Dixq (管理人)さんの書かれた関数を簡単に説明してみますね。
●時限イベントを登録する関数です。
RegisterEvent( int Kind, int Time );
Kindにイベントの種類番号(自分で決めてください)、Timeにイベント発動までの時間(フレーム数)を登録します。この関数を呼ぶのは、時限イベントを設定したいタイミングです。
●イベントのタイミングを計算する関数です。
int CalcEvent(){
メインのループのどこかで呼び出しておきます。
中身が完成していないので関数の中身を自分で書く必要があります。
//カウンタを加算
Event.Count++;
//カウンタが時間になれば
if( Event,Count >= Event.Time ) {
//イベント停止
Event.Flag = 0;
//登録してあるイベントを発火();
if( Event.Kind==自分で決めたイベントの種類番号 ) {
//イベント処理の呼び出し(何をするかは自分で決めてください)
}
Re:フラグからタイマー起動
softyaさん、ご説明ありがとうございます。
> こーりさん
いきなり具体的なプログラムで少し解りにくかったかもしれません。
上にも書いた通り、イベントドリブンではない設計のゲームプログラムで、○秒後にイベントを発生させるという処理をしたい時は、カウンタをカウントアップさせて時間をはかり、設定したイベントを発火させるのが良いと思います。
その方法は上の方法でなくてもよいと思うので、まずは自分の思うようにプログラムを書いてみるのが良いと思います。
自分に最も合う良い方法は試行錯誤の中で見つけていくのが一番だと思いますので。
> こーりさん
いきなり具体的なプログラムで少し解りにくかったかもしれません。
上にも書いた通り、イベントドリブンではない設計のゲームプログラムで、○秒後にイベントを発生させるという処理をしたい時は、カウンタをカウントアップさせて時間をはかり、設定したイベントを発火させるのが良いと思います。
その方法は上の方法でなくてもよいと思うので、まずは自分の思うようにプログラムを書いてみるのが良いと思います。
自分に最も合う良い方法は試行錯誤の中で見つけていくのが一番だと思いますので。