2012-04-13 19 views
4

私はループゲームのプログラミングのカップル年の背景から来た。私は、UpdateとDrawのような関数を継続的に呼び出すアプリケーションで一定のループを持つことに慣れており、各フレームごとに値を増分することでアニメーションのようなアクションを実行できます。WPFでイベントベースでないアクションを実装する方法

私はWPFに関連した仕事をしていますが、私はそのシステムにあまりにも依存していました。多分私はWPFのための限られた感じを持っているが、すべてがイベントベースであるように思える。ユーザーがボタンをクリックし、コードを通知し、コードが値を操作します。値が変更され、コードはUIに通知し、UIはレイアウトを更新します。 GUIベースのアプリケーションプログラミングではうまくいきますが、ループベースのゲームプログラミングでは些細な状況に遭遇したときに、単純な振る舞いを実装するための良い方法を見つけることができませんでした。

あまりにも曖昧になる危険があるため、私は現在の問題を例として挙げます。 Windows 8が発表された後、私はセマンティックズームのアイデアに非常に魅了されました。 Start Screenで広範囲にプレイした後、私はMicrosoft Surface用のWPF4.0へのSemantic Zoomのポートで作業を始めました(私は自分の仕事でSurfaceで作業します)。私はピンチジェスチャーを使用してビューのスタック内を上下に移動することを可能にする簡単な例を望みます。

操作イベントを理解しようと多くの時間を費やした後(私はそれを... blehには入れません)、ついにピンチジェスチャーに基づいて私のビュースケーリングを得ました。特定のポイントを超えて拡大すると、私は「ズームアウト」ビューにジャンプします。かなりクール。しかし、問題は、ユーザーがジェスチャーを完了せず、ズームアウトしないことを決定した場合、私は小さなビューを残しています。私は、ユーザーの挟み込みから常に「リバウンド」するビューのスケールをアニメートし、1のスケールに戻したいと思います。これがループベースであれば、各フレームに1つだけLerpを使用します。しかし、WPFはすべてイベントに基づいているので、私は少し失われています。

あり、慣性または異なる操作イベントを使用して、この特定の問題に対する答えは(と私はそれを聞いて幸せになると思います)、おそらくですが、加えて、私はちょうど仕事に私は再配向させることができるか、私の考え方知りたいですより効果的にWPFで。購読するイベントを知ることだけですか?アニメーションを使って私がしたいことを行うための巧妙な方法はありますか?私はこれらの種類のタスクを達成するためにスレッドを使うべきでしょうか、それは不正です(それは信頼できないようですが、私はWPFのスレッドで不安定です)。

この問題は、WPFで効果的であるという私の最大の障壁の1つです。私は(これはMVVMをまだよく知らないと思っています。私はそれが解体され、ループベースのゲームプログラミング以上に効果的になることを確認したいと思います。

答えて

0

あなたがしたいことのほとんどがイベントベースの方法で実行できることは間違いありませんが、MSDN How to: Render on a Per Frame Interval Using CompositionTargetをご覧ください。最後のセクションフレームごとのアニメーション:アニメーションとタイミングシステムをバイパスするProperty Animation Techniques Overviewに入れてください。

+0

この結果はどれですか? – Clemens

関連する問題