【发布时间】:2012-04-13 21:30:56
【问题描述】:
我有几年的循环游戏编程背景。我非常习惯在我的应用程序中有一个恒定循环,它不断调用 Update 和 Draw 等函数,允许我通过每帧增加一点值来随时间执行动画等操作。
现在我找到了一份涉及 WPF 的工作,但我发现我太依赖那个系统了。也许我对 WPF 的感觉有限,但似乎一切都是基于事件的。用户单击一个按钮,您通知代码,代码操作值。值改变,代码通知 UI,UI 更新布局。它适用于基于 GUI 的应用程序编程,但我发现当我遇到在基于循环的游戏编程中微不足道的情况时,我会陷入困境,无法找到实现简单行为的好方法。
冒着过于模糊的风险,我将提供我当前的问题作为示例。在 Windows 8 发布后,我对 Semantic Zoom 的想法非常着迷。在广泛使用“开始”屏幕后,我开始为 Microsoft Surface 开发 Semantic Zoom 到 WPF4.0 的端口(我在工作中使用 Surface)。我只想要一个简单的例子,它可以让我使用捏合手势在一堆视图中上下导航。
在花了很多小时试图理解操作事件(我不会深入那个...... bleh)之后,我终于得到了基于捏合手势的视图缩放。如果它超过某个点,我会跳回“缩小”视图。很酷。但是,问题是,如果用户没有完成手势并决定不缩小,我就会看到一个较小的视图。我想为视图的比例设置动画,使其从用户捏合中不断“反弹”并恢复到 1 的比例。我知道这是否是基于循环的,我只会将 Lerp 朝向每帧 1。但是由于 WPF 都是基于事件的,所以我有点迷茫。
使用惯性或不同的操作事件可能会解决这个特定问题(我很高兴听到它),但除此之外,我只想知道如何重新调整我的思维定势以进行更多工作在 WPF 中有效。仅仅是知道要订阅哪些事件吗?有没有聪明的方法来使用动画来做我想做的事?我应该使用线程来完成这类任务,还是作弊(这似乎不可靠,而且我对 WPF 中的线程感到不安)?
我认为,这个问题是我在 WPF 中发挥作用的最大障碍之一(嗯,这个问题还不太了解 MVVM,正在研究那个)。我希望看到它被拆除,并且能够在不仅仅是基于循环的游戏编程中发挥作用。
【问题讨论】: