5

どうやら xna ゲームは 30 fps でしか実行できないようです。これは残念です。iPhone でのゲームは 60 でかなり良く見えたからです...

いずれにせよ、タッチ スクリーンの状態に関する情報を取得できる唯一の方法は現在の状態を取得することであるため、事実上、これはタッチ スクリーンを 30 fps でしかサンプリングできないことを意味します。

ゲームを 30 fps で実行する必要がある場合でも、タッチ スクリーンからより高い解像度のサンプリングを取得する方法はありますか? 多分コールバックを通して?またはタイムスタンプ付きのタッチイベントのリストにアクセスすることによって?

4

2 に答える 2

2

お探しの機能はTouchPanel.GetState. この関数を 60Hz で呼び出すのは簡単なことです。

60Hz を取得するにはGame.TargetElapsedTime、1/60 秒に設定できます。これにより、30FPS で VSyncing を行っていると仮定すると、1 回の描画ごとに 2 回の更新が行われます (ここでの Shawn Hargreaves の投稿によると)。

それでもゲーム ステートの更新を 30 FPS で実行したい場合 (60 FPS でタッチ入力を実行するだけ)、それらの更新を別のスレッドに置くことができます。への最初の呼び出しでそのスレッドで進行中の更新を開始し、Game.Update2 番目の呼び出しで終了するのを待ちます。

(通常、XNA 入力はメイン スレッド ( source )で行う必要があることに注意してください。これは電話とタッチ入力に適用されると思います。)

または、クラスのタイミングを自分で完全に置き換えることもできGameます (自分自身を呼び出しGraphicsDevice.Presentます)。簡単ではありませんが、可能です。Gameまず始めに、Reflectorのクラスを見てみましょう。

(免責事項:私はまだ電話ベースの実際の開発を試していないので、私が知らない電話関連の落とし穴があるかもしれません。)

于 2010-08-12T11:59:41.387 に答える
0

パフォーマンス上の理由から、30fps のサンプリング レートが設定されています。

タッチをより頻繁にクエリする方法を見つけたとしても、UI をより高速に更新することはできないため、どのようなメリットが得られるかはわかりません。

解決策を見つけるのに時間をかける前に、実際のデバイスでテストして、30fps が実際にどの程度許容できるかを確認します。

于 2010-08-12T08:59:37.407 に答える