ここから本文です

解決済みの質問

RPGのイベントのプログラミングの良い方法がわかりません(C++)

nandemohoneybeeさん

RPGのイベントのプログラミングの良い方法がわかりません(C++)

自分のイベントのプログラムの考えは、

typedef struct{
int type ;//処理の番号
//(ex.歩く・しゃべる・暗くなる)
int link ;//処理に使う具体的な値の割り当てられた番号
//(ex.どこからどこへ移動・何をしゃべるのか・どこまで暗くするのか)
bool syn ;//イベントを同期でうごかすかどうか
//(ex.キャラクター2人が一緒に動く・しゃべりながら歩く)
}ivent;

上記の構造体を幾つも定義し、ファイルのロードによって値を入れ、
割り当てられた処理を実行すれば出来るような気がするのですが、
これでいいのでしょうか?(割り当てられている具体的な値もロード)
それとも、もっと良い考え方があるのでしょうか?
出来れば、switch文等でイベントの処理を書くのではなくファイルのロードで処理するようにしたいです。

違反報告

ベストアンサーに選ばれた回答

a546213bakuraさん

ファイルからロードするというとゲームプログラム内に小さなスクリプトエンジンを実装するということでしょうか?
そのやり方は当たりです。とても賢いやり方です。自信を持って下さい。
アドバイスとしてはファイルを先に必要な分だけ読み込んでおくとロードが短くなります。でもRPGなら先読みする必要なんて無いと思いますが、アクションゲームなどでは先読みは基本的なことです。


また今回の質問のソースコードですが、イベント処理をスタックしていく方式ですか?
いくつか基本的な部分が気になります。

例えばint linkですが、一つしか値を遅れないのですか?
もし斜めに移動するイベントを発生させる場合など二つ以上の値が必要な処理はどうするのでしょう?
対処法としては、int型ではなく値受け渡し用の構造体を定義してそれを使うことが考えられます。

イベントを同期で動かすかどうかですが、bool型では何と同期するのかが分かりません。同期してはいけないものや、同期して欲しいイベントなどの切り分けが必要です。
なのでイベントそのものに種類を作り、どの種類のイベントなのかを明確にすると良いかと思います。例えば「int eventType」を追加するなど。
もちろんイベント処理系も種類ごとに分けると楽です。

とりあえず、どの程度のイベント定義なのかが分からないので詳しいアドバイスは難しいですが、もしRPGでお馴染みの操作できない時間のイベントや動作中の細々としたイベント全てを担当するならば値の受け渡し方法に問題があります。
int型で受け渡しするのは小さなモジュールのみですので、イベントという大きなくくりで考えるなら構造体がバンバン出てくると考えて下さい。

typedef struct value{
int x;
int y;
int z;
int vector;
int flagType;
......
.....
....
...
.
};

typedef struct{
int type ;
value link ;
bool syn ;
}ivent;

これらは無駄にリソースを使っているように見えますが、画像などのリソース消費量と比べれば微々たるものです。
結局はメモリをあまり使わないことよりも、プログラムとして簡潔に、拡張性を残して書くほうが無理ゲーになり辛いです。

また今回の質問とは関係ないですが、イベント処理系にイベントを追加可能かどうかを判断する部分を作ると無駄なイベントを積むことを回避できます。また、どのイベントが実行可能かを判断させるとバグが少なくなります。

難しいことは色々あると思いますし、面倒なことも色々あると思いますが頑張ってください。応援しています。

  • 違反報告
  • 編集日時:2012/2/18 15:46:19
  • 回答日時:2012/2/18 15:05:48

質問した人からのコメント

  • 大変詳しくご回答いただき有り難うございます。
    今のご時世『RPGツクール』などが存在して、「このまま作っていて需要あるのかな」なんて思っていたのですが、とても勇気づけられました!w
    本当に有り難うございました!
  • コメント日時:2012/2/19 22:19:20

グレード

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 1点(5点満点中)1人が役に立つと評価しています。

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:C言語関連]

ただいまの回答者

01時38分現在

2382
人が回答!!

1時間以内に4,335件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する