我有几年循环游戏编程的背景。我非常习惯在应用程序中使用恒定循环,它不断调用 Update 和 Draw 等函数,从而允许我通过每帧增加一点值来执行动画等操作。
现在我有了一份涉及 WPF 的工作,但我发现我太依赖那个系统了。也许我对 WPF 的感觉有限,但似乎一切都是基于事件的。用户单击按钮,您通知代码,代码操作值。值发生变化,代码通知 UI,UI 更新布局。它适用于基于 GUI 的应用程序编程,但我发现当我遇到在基于循环的游戏编程中微不足道的情况时,我陷入困境,无法找到实现简单行为的好方法。
冒着过于模糊的风险,我将提供我当前的问题作为示例。 Windows 8 发布后,我对语义缩放的想法非常着迷。在广泛使用“开始屏幕”后,我开始为 Microsoft Surface 开发 Semantic Zoom 到 WPF4.0 的端口(我在工作中使用 Surface)。我只是想要一个简单的示例,它允许我使用捏合手势在一堆 View 中上下导航。
花了很多时间试图理解操作事件(我不会详细讨论这个...... bleh),我终于得到了基于捏合手势的 View 缩放。如果它超过某个点,我会跳回“缩小” View 。很酷。但是,问题是,如果用户没有完成手势并决定不缩小,我就会看到较小的 View 。我想要动画 View 的比例,使其不断从用户捏合中“反弹”并恢复到 1 的比例。我知道如果这是基于循环的,我只需将 Lerp 调整为每帧 1。但由于 WPF 都是基于事件的,所以我有点迷失。
使用惯性或不同的操纵事件可能可以解决这个特定问题(我很高兴听到它),但此外我只是想知道如何重新定位我的心态以更多地工作在 WPF 中有效。仅仅是知道要订阅哪些事件吗?有没有聪明的方法可以使用动画来完成我想要的事情?我应该使用线程来完成此类任务,还是作弊(这似乎不可靠,而且我对 WPF 中的线程感到不安)?
我认为这个问题是我在 WPF 中发挥作用的最大障碍之一(好吧,这个问题还不太了解 MVVM,正在努力解决这个问题)。我希望看到它被拆除,并且能够在不仅仅是基于循环的游戏编程中发挥作用。
最佳答案
虽然我很确定您想做的大部分事情都可以通过基于事件的方式完成,但您可能需要查看 MSDN How to: Render on a Per Frame Interval Using CompositionTarget 。另请注意 Property Animation Techniques Overview 中的最后一节每帧动画:绕过动画和计时系统 .
关于wpf - 我应该如何在 WPF 中实现非基于事件的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10148569/