在Silverlight中实现物理动画的最佳方式是什么?

3
我是新手,想要在Silverlight中制作一个由大炮射出的球并按物理规律运动(大致呈椭圆形路径)的动画效果。
我的想法是使用回调定时器,并通过更改Canvas.LeftProperty和Canvas.TopProperty值来每50毫秒移动小球。这种方法正确吗?还是应该使用DoubleAnimation?我对在此处使用动画的抵抗力在于,我需要连续创建许多不同的动画。
Silverlight专家会采用哪种方法呢?

这就是我会做的——看起来最简单。 - Mike Blandford
路径是抛物线,而不是椭圆形的。 - Jim Garrison
3个回答

2

可能有点过头了,但你是否知道物理助手库?


2
请看我之前提出的问题here。被接受的答案比较了在Silverlight游戏中进行动画的五种不同方法,并链接到这篇博客。文章得出结论,所选方法将取决于多个因素。
回答您的问题,我个人会使用dispatcher timer,它在每次屏幕重新绘制时触发并设置属性以移动X和Y。
我还发现Game Physics 101是一个非常好的资源。

1

我认为你不需要连续创建多个动画。球只改变一次方向。

Y值先下降(使球看起来像是在上升),然后上升(使球看起来像是在下降)。当它下降时,减速应该是恒定的(代表9.8米/秒/秒左右),而当Y值上升时(炮弹下降时),加速度是恒定的,直到它碰到代表地面的点。

X值应该是恒定的,或者如果考虑到空气阻力,则略微减速。

因此,你需要计算以下内容:

  • 它从哪里开始(显然是炮弹)
  • 球什么时候达到最高点
  • 球什么时候落地

现在你可以将Y值作为一个起始值、结束值和一个航路点的动画进行处理。

而X值则只需有一个起点和一个终点即可进行动画处理。

当然,要确定输入 AccelerationRatio, DecelerationRatio, SpeedRatio, Duration, FromTo 参数的确切数字,这将涉及到非平凡的数学运算。但不管使用何种方法,您都必须计算出这些参数的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接