2010年7月9日金曜日

破滅的な行為

 画面回転処理でExceptionが発生し、終了してしまう件について、調べててわかったことを書いてみます。

・SystemStateの定義、記述方法に問題はない
たとえば画面オープン直後の画面向き変更処理や、MsgBoxをかませた場合に正常に動作することなどから、ここに問題はないことがわかる。

・MsgBoxをかませた場合の動作
落ちる箇所の1行前にMsgBoxを入れた場合、画面上では一度画面向きが縦に変更された後にMsgBoxが表示され、それを閉じた後に横向きに戻る。

・timmerで0.1秒待ってから画面向きを横にしようとした場合
0.1秒以下だと落ちる。(理由はわかっています)
0.1秒以上にすると、画面が一瞬だけ縦の状態になってから、直後に横になる。


 以上のことから、画面向き変更処理がまだ途中の段階で、画面向きを横にする処理を呼び出しているためにエラーが発生していると思われます。
 MsgBoxやtimmerを使用した場合は変更処理が終わってから横向きにする命令が実行されるため、エラーが発生していないわけです。

 ……さいですか。
 つまり横向き固定のアプリケーションを作る場合は、「画面が縦になった瞬間に横に戻す」という方法では実装出来ず、「画面向きが変更されるというイベントそのもの」を殺さないとどうしようもないわけですね。
 ……できるのかなぁ、それ。


 というわけで私の場合、今回はtimmerを使用して0.1秒待たせることにしました。
 この方法の場合、画面が一瞬だけ縦に戻るのが見えてしまうため見栄えは非常に悪く、あまりいい方法であるとは言えませんが、その部分は今後の課題としておきたいと思います。回転イベントそのものを無効に出来そうにない場合、縦方向での使用も考えて再配置処理やらを作る必要がありますね。
 横向きに拘っているのは個人的な理由なので、実際にアプリを使ってみて縦方向でも問題は無いのではないかと判断した場合は、縦方向での使用を実装する方向で考えていこうと思います。


 酔っ払っているので解りにくい文章になってしまったかもしれませんが、今回の問題に関してはとりあえず以上です。
 この件のアプリですが、これで(一応)問題解決のため、近々β版を公開したいと思います。
 内容はMTG用ライフカウンター。自分のライフだけを管理するモードと2人分のライフを管理するモードの2つをもち、画面のフリック入力でライフの増減が簡単に出来るようにしています。
 またマナプール管理機能(ON,OFF可能)も持たせてあり、マナ管理が大変な長いコンボ時などに効果を発揮する予定です。ちなみに1人用画面の場合、背景画像設定を行えるようにしてあり、自分の好きな画像のライフカウンターとして使えます。


以下、作成する必要がある残件内容。
・オプション画面

以下、近々作る予定の機能
・1人用のときにもマナ管理機能を出来るようにする
・一部画面レイアウトの変動を可能にする(文字サイズ等)

以下、現段階での既知の不具合
・画面回転時、一瞬だけ縦方向になった姿が見える(今回のメインの話題の件)
・マナ管理機能ON時の画面レイアウトが致命的に か っ こ わ る い

 乞御期待ッ!(基本は俺得アプリですが)

2 件のコメント:

  1. こんにちは、一向に入荷連絡が来なくて悶々としてる月夜です。

    縦向き専用とか横向き専用のゲーム構想を練ってるんですが、
    向き変更が強制的に行われるのは困り者ですね…

    ゲームなのでGUIコントロールは使わず全部描画の予定ですが
    向き変更されるときっと座標基点も変わるんでしょうね


    私も気になるのでちょいちょい調べようと思います

    返信削除
  2. IS02は品切れしているところが多いみたいですね
    思ったよりも人気のようで、ちょっとほっとしてたりします

    >向き変更
    多分何かしらの対処方法はあるはずなのですが、いかんせん技術レベルが低いのでまだわからず……。
    今回の動作の件もエミュ上ではエラーになっていなかったりしたので、やり方しだいでは何とかなりそうな気はするんですが。

    何かいい方法が見つかれば、また記事にしておきます。

    返信削除