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

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

5alg-ljalg-lj   3  Re:Re:Re:入力待ちの方法について

説明不足ですみません。

mainFormEventHandlerや他のフォーム用のEventHandler(itemFormEventHandler、mapFormEventHandler、battleFormEventHandler、など)にそれぞれイベントを書く、という方法はとっています。

たとえば迷路移動用フォームのイベントハンドラは、こんな感じです。

#define FwdBtn  1001

#define LeftBtn  1002

Int8 nowD;//向いている方向 N:-10 S:10 E:1 W:-1

(中略)

  static Boolean

gameFormEventHandler(EventPtr pEvent)

{

  Boolean handled = false;

  FormPtr pForm = FrmGetActiveForm();

  Char tmp1[10];

  UInt8 i;

  switch (pEvent->eType) {

    case frmOpenEvent:  // Form's 1st event

      FrmDrawForm(pForm);

      gameFormInit(pForm);  //迷路の初期状態表示

      handled = true;

      break;

    case keyDownEvent:

      pForm = FrmGetActiveForm();

      if(pEvent->data.keyDown.chr == vchrPageUp) { //前進

        restoreHPcheck(); //10歩移動ごとにHPが回復

        mazeFwd(); //前進に伴う処理(座標移動、アイテム取得チェック、敵遭遇チェック、など)

        handled = true;

      } else if(pEvent->data.keyDown.chr == vchrPageDown) { //後ろを向く

        nowD = 0-nowD;  //方向を変える

        mazeDraw(); //迷路の再描画

        encountCheck(); //敵遭遇チェック

        handled = true;

      }

      break;

    case ctlSelectEvent:

      pForm = FrmGetActiveForm();

      if(pEvent->data.ctlSelect.controlID == FwdBtn) { //前進

        restoreHPcheck(); //10歩移動ごとにHPが回復

        mazeFwd(); //前進に伴う処理(座標移動、アイテム取得チェック、敵遭遇チェック、など)

        handled = true;

      } else if(pEvent->data.ctlSelect.controlID == LeftBtn) { //左を向く

で、「前進に伴う処理」や「敵遭遇チェック」など、それぞれの処理の中で場合によっては入力待ちが発生します。

たとえば、敵遭遇チェックの中で敵に会わなかったら入力待ちはしません。

敵に会ったら「敵だ!」と表示して入力を待ち、入力があったら戦闘フォームに遷移する、という感じです。

それをどうしたもんかなぁ、というところなんです。

ちょっと前は入力待ち用の関数を作って、各処理からそれを呼び出していました。

ちなみにその入力待ち用関数部分のソースは消してしまいましたけど、使い方としてはこんな感じでした。

static void encountCheck(void) {

  UInt8 t;

  if(mNum != 0) { //敵の数がゼロでなかったら=まだそのフロアに敵がいるなら

    t = getmyRnd(); //0~99の乱数を取得

    if(t <= 10) {

      print(2,134,"敵だ!"); //printはブロック崩しソースから無断借用(汗)

    waitTap(); //入力があるまで次の処理に進まない

    battle(); //戦闘を開始する

    }

  }

}

ただwaitTap()があるせいでFatal Errorが出ていたようなので、その処理を消して、代わりにPilotMainのしょっぱなで、入力待ちフラグがTrueなら入力待ちをする、みたいにやろうとしたんですよね。

なので、「入力があるまで次の処理に進まない」という関数がErrorなしで実現できればベストです。

ただ、そんな入力待ちを使わないようなつくりにする、という方法もありますね…。

>wait4TapFを、trueにしているところがあるのかな?

そうですそうです。

>ともあれ、ペンイベントは、PalmOSの根幹なんで、あんまり横取りしないほうがいいので

やっぱりそうですか…。

今はまだ試行錯誤しながら作法を学んでいる感じです。

怒られたとき(=Fatal Error喰らったとき)に初めてダメなことだと学習する、みたいな。

※余談ですが、グループメンバーが増えて、こんな感じで疑問・質問や情報提供などのやりとりが活発になるといいですねぇ。現時点では私が質問してchamekanさんが答える、という形にしかなりようがないので(汗)。ご迷惑をおかけします。

返信2005/06/21 10:58:16