Allegro を使用して C++ で 2D RPG ゲーム エンジンを作成しています。スクリプト システムを実装する必要があるところまで来ました。だから、私の問題はこれです:
Eventという構造体があります。この構造体内には、イベントが発生したときに実行する関数を指す関数ポインターがあります。例を次に示します。
struct Event {
//...
void (*func)(Player*, void*);
//...
}
さて、イベントを作成するには、次の関数があります。
Event* Events::register_event_source(int x, int y, std::string name, Player* player, void (*func)(Player*, void*));
したがって、それを使用するには、この署名で関数を作成するだけです:
void test_event(Player* p, void* data)
{
//Do something cool here
}
次に、イベント ソースを登録し、その関数にアドレスを指定します。
//...
Player* player = new Player(0, 0);
//...
Event* evt = Events::register_event_source(10, 10, "test event", player, &test_event);
//Eventually set some data for the event
evt->set_data(new std::string("Just some test data"));
このようにして、プレーヤーが割り当てられたスポット (この場合は x = 10、y = 10) を通過すると、イベントが発生し、test_event関数のコードが実行されます。
さて、私の質問は、実行時にこのプロセスを行うこと、または少なくともそれに近づくことは可能ですか?? ...実行時に関数(この場合は「test_event」)を作成する必要がありますが、調査を行ったところ、実行時に関数を作成することは実際には不可能であることがわかったと思います。それで、私はどのアプローチをとるべきですか?? ...私はそれが抽象的な質問であることを知っています...しかし、私は本当にこの問題にアプローチする方法を知りません.
アドバイスありがとうございます!説明が下手ですみません…英語は私の言語ではありません!