我正在使用 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”),但我做了一些研究,我认为我理解的是在运行时创建函数实际上是不可能的。那么,我应该采用哪种方法?...我知道这是一个抽象的问题...但我真的不知道如何解决这个问题。
感谢您提供任何帮助的建议!抱歉我的解释能力不好……英语不是我的语言!