我正在尝试编写一个简单的游戏,看看它是如何完成的。在我当前的实现中,我使用的是函数指针数组,而我的主游戏循环(剥离)看起来像这样;
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 game
或struct title
。例如,当调用load_level [STATE_TITLE]时,会创建struct title
,并将全局void指针设置为它的地址。所以,游戏状态函数可以像这样使用它:
void logic_game()
{
struct game *resources = (struct game *) globalvoidpointer;
// do stuff with resources...
}
但是,这整件事感觉不对。它感觉过度工作和编译给我。您如何建议我应该管理游戏资源和状态? (或者说如果这不是太复杂,我应该坚持下去。)
答案 0 :(得分:0)
我怀疑设计是否过度思考。
将架构的这个方面搁置一段时间。然后付出一些努力来勾勒出两个不同的stateid
实现将对handle_events()
,logic()
和render()
执行的操作。您可能会发现资源的抽象不是必需的。 stateid
本身可能足以区分需要做什么。