2012-03-15 5 views
0

私はそれがどのように行われたかを見るために簡単なゲームを書こうとしています。私の現在の実装では、私は関数ポインタの配列を使用しています、私のメインゲームループ(剥奪)はこのように見えます。Cで異なるリソースのゲーム状態を扱う

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

このようにして、ゲームの状態によって異なる機能を呼び出すことができます。各状態は異なるリソースを持っているので、ゲームの状態は、タイトル、メニュー、またはレベル1などのようなものであってもよいし、また、私はここに、負荷を持っており、各状態のための機能をアンロード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

おそらくhttp://gamedev.stackexchange.com/の質問ですか? –

答えて

0

私は設計が熟考されていると思われます。

このアーキテクチャの側面をしばらくお待ちください。次に、2つの異なるstateidの実装がhandle_events(),logic()、およびrender()のために何をするかをスケッチするための努力をしてください。おそらく、リソースの抽象化は必要でないことがわかります。 stateid自体は、おそらく何を行う必要があるかを区別するのに十分なものです。

関連する問題