4

我有几年的循环游戏编程背景。我非常习惯在我的应用程序中有一个恒定循环,它不断调用像 Update 和 Draw 这样的函数,允许我通过每帧增加一点值来随着时间的推移执行动画等动作。

不过,现在我找到了一份涉及 WPF 的工作,我发现我太依赖那个系统了。也许我对 WPF 的感觉有限,但似乎一切都是基于事件的。用户单击一个按钮,您通知代码,代码操作值。值改变,代码通知 UI,UI 更新布局。它适用于基于 GUI 的应用程序编程,但我发现当我遇到在基于循环的游戏编程中微不足道的情况时,我会陷入困境,无法找到实现简单行为的好方法。

冒着过于模糊的风险,我将以我当前的问题为例。在 Windows 8 发布后,我对 Semantic Zoom 的想法非常着迷。在广泛使用开始屏幕后,我开始为 Microsoft Surface 开发一个将语义缩放到 WPF4.0 的端口(我在工作中使用 Surface)。我只想要一个简单的例子,它可以让我使用捏合手势在一堆视图中上下导航。

在花了几个小时试图理解操作事件之后(我不会进入那个...... bleh),我终于得到了基于捏合手势的视图缩放。如果它超过某个点,我会跳回“缩小”视图。很酷。但是,问题是,如果用户没有完成手势并决定不缩小,我会得到一个较小的视图。我想为视图的比例设置动画,使其从用户捏合中不断“反弹”并恢复到 1 的比例。我知道这是否是基于循环的,我只会将 Lerp 朝向每帧 1。但是由于 WPF 都是基于事件的,所以我有点迷茫。

使用惯性或不同的操作事件可能会解决这个特定问题(我很高兴听到它),但除此之外,我只想知道如何重新定位我的思维定势,以便在 WPF 中更有效地工作. 仅仅是知道要订阅哪些事件吗?有没有聪明的方法来使用动画来做我想做的事?我应该使用线程来完成这些类型的任务,还是作弊(这似乎不可靠,而且我对 WPF 中的线程感到不安)?

我认为,这个问题是我在 WPF 中有效的最大障碍之一(嗯,这个问题还不太了解 MVVM,正在研究那个)。我希望看到它被拆除,并且能够在不仅仅是基于循环的游戏编程中发挥作用。

4

1 回答 1

0

虽然我很确定您想要做的大部分事情都可以以基于事件的方式完成,但您可能想看看 MSDN How to: Render on a Per Frame Interval Using CompositionTarget。另请注意最后一节Per-Frame Animation: Bypass the Animation and Timing System in Property Animation Techniques Overview

于 2012-04-13T22:02:54.870 回答