CompositionTarget.Rendering事件是构建游戏主循环的完美之选。它基本上以vsync的速率(通常为60 Hz)触发。
在渲染合成树中的对象之前发生。在将动画和布局应用于合成树之后,将Rendering事件路由到指定的事件处理程序。
per-frame animation how-to文章介绍了更多内容。
请注意,在计算布局之后,将调用事件处理程序方法。但是,您可以在事件处理程序方法中修改布局,这意味着在渲染之前将再次计算布局。
基于此,其处理程序中的代码规则为:
避免更改布局
快速返回
还有什么其他陷阱?哪些非显而易见的动作导致另一个布局通过?处理程序内部到底有多少时间?
最佳答案
我认为它的主要目的是启用无计时器的动画,例如那些采用物理元素(如重力)的动画,其中需要精确的定时定时。但是,它不是游戏图形的好地方... WPF不是游戏语言,严重的游戏将无法使用它平稳运行,因为开销太大。如果要编写.NET游戏,请使用XNA。
摘自《 WPF控件开发释放:建立高级用户体验》一书:
一些读者可能会认识到这种方法与高端图形之间的相似之处
子系统,例如DirectX。不要将CompositionTarget.Rendering误认为是良好的注入
指向创建基于WPF的游戏图形引擎。高端显卡和超高
帧频不是WPF动画这一特定方面的目标。
与DispatcherTimer方法类似,基于CompositionTarget.Rendering的动画
也没有时间限制。但是,这些事件与渲染线程同步,导致
比DispatcherTimer更流畅的动画。也没有必要开始和
停止计时器,尽管您可能必须分离并附加事件处理程序以进行改进
性能。