入力待ちの方法について RSSフィード
 

ツリー全部最新の50件前後を読む

6chamekanchamekan   ははあ。

do

    {

      // Wait for an event

      EvtGetEvent(&event, evtWaitForever); ←これ

      if (!SysHandleEvent (&event))

      if (!MenuHandleEvent (0, &event, &error))

      if (!appHandleEvent (&event))

        FrmDispatchEvent (&event);

    } while (event.eType != appStopEvent);

いずれにしても、入力は、上記ループのEvtGetEventの部分でやる必要があるので、

ゲームの状態を表す変数をつくったらどうでしょう。

#define State_forward_before_input ****(重複しない適当な数字)

#define State_forward_after_input ****

#define State_encounter_before_input ****

#define State_encounter_after_input ****

(長いので、OnBoardCでは、適当に省略して短くすべきでしょう(^_^;)

SForB, SForA, SEncB, SEncAくらいか(^_^;))

UInt16 game_state;

「前進に伴う処理中」「敵遭遇チェック中」のそれぞれ、入力があったかないかみたいなのを全部わけるわけて、処理ごとに、game_stateがどの状態であるか、という数字を入れて判別するわけです。

しかし、これはアタマがわるいので、処理の内容と、入力前後は、別のフラグにするべきかもしれません。

UInt16 game_state;

Boolean input_state;

とか。

ちょっと、alg-ljさんのケースでどうすれば、最適の状態変数ができるのかわかりませんが(^_^;)(ゲームに依存する)。

ちょうど、わたしのブロックくずしでやっているgsという変数みたいで、あのときも、たとえば、ゲームスタート前は、ずっと入力があるのを待って、入力がないと、ゲーム開始という状態にはなりません。また、最初のある一定の時間は、ボールがパドルにひっついてて、パドルと一緒に動いて、最初に狙うブロックを決めることができたりします。

入力については、いつも、イベントループのEvtGetEvent関数を使ってるんですが、何を処理するか、とか、あるいは、何かの状態になるまで次の状態にならないというのは、そういうゲームの状態の変数をつくって、やっています。

そのあたりのことではないかな、と思うんですが、的はずれなら、また、情報をお知らせください(^_^;)。

ちなみに、わたしの作った関数とか、再利用OKというか、printとかbitmapなんか、だれがつくってもああなりますから(^_^;)。

返信2005/06/21 11:59:41
  • 6ははあ。 chamekanchamekan 2005/06/21 11:59:41
    do     {       // Wait for an event       EvtGetEvent(&event, evtWaitForever); ←これ       if ...
    • 7なるほど。 alg-ljalg-lj 2005/06/21 17:42:45
      全然、的外れではないですよ。 >何を処理するか、とか、あるいは、何かの状態になるまで次の状態にならないというのは、そういうゲームの状態の変数をつくって、やっています。 なるほど。 そうやればいい ...