在C中处理具有不同资源的游戏状态

时间:2012-03-15 16:05:22

标签: c pointers state-machine

我正在尝试编写一个简单的游戏,看看它是如何完成的。在我当前的实现中,我使用的是函数指针数组,而我的主游戏循环(剥离)看起来像这样;

while (stateid != STATE_EXIT) {
    handle_events[stateid] ();
    logic[stateid] ();
    render[stateid]();
    change_state(); // change state id, and load new state
}

这样,我可以根据游戏状态调用不同的功能。游戏状态可能类似于title,menu或level1等。由于每个状态都有不同的资源,我也有每个状态的加载和卸载功能,这里是change_state看起来(剥离)的方式

if (nextstate != STATE_NULL) {
    unload_level[stateid] ();
    load_level[nextstate]();
    stateid = nextstate;
    nextstate = STATE_NULL;
}

为了处理不同游戏状态的不同资源,我创建了一个全局void指针。根据游戏状态,此全局可能指向struct gamestruct title。例如,当调用load_level [STATE_TITLE]时,会创建struct title,并将全局void指针设置为它的地址。所以,游戏状态函数可以像这样使用它:

void logic_game()
{
    struct game *resources = (struct game *) globalvoidpointer;
    // do stuff with resources...
}

但是,这整件事感觉不对。它感觉过度工作和编译给我。您如何建议我应该管理游戏资源和状态? (或者说如果这不是太复杂,我应该坚持下去。)

1 个答案:

答案 0 :(得分:0)

我怀疑设计是否过度思考。

将架构的这个方面搁置一段时间。然后付出一些努力来勾勒出两个不同的stateid实现将对handle_events()logic()render()执行的操作。您可能会发现资源的抽象不是必需的。 stateid本身可能足以区分需要做什么。