我正在制作一个粒子游戏(到目前为止,只有水),并且元素内部的Draw()方法非常慢,只有一些是同时进行的.我认为这是因为它每秒都在计算这么多,但我仍然对它很不满意,因为它们只是基本
这是我的代码:
(循环)(每50毫秒跑一次)(注意,我刚刚包含了计时器的表格,我正在使用WPF.)
void TimeKeeper_Tick(object sender, EventArgs e) { foreach (Element ele in Elements) { ele.Draw(); } }
并绘制方法. Pos是一个“Vector2”(我为了节省时间而制作的第一类):
public void Draw() { Pos.Add(3, 10); if (Pos.Y > (int)canvas.ActualHeight) { Pos.Set(Pos.X, (int)shape.RenderSize.Width); } if (Pos.X+shape.RenderSize.Width > (int)canvas.ActualWidth) { Pos.Set(0, Pos.Y+(int)shape.RenderSize.Height); } shape.SetValue(Canvas.LeftProperty, (double)Pos.X); shape.SetValue(Canvas.TopProperty, (double)Pos.Y); if (canvas.Children.IndexOf(shape) != null) { canvas.Children.Remove(shape); } canvas.Children.Add(shape); }很大程度上取决于你认为’慢’的东西
如果每50毫秒移动一次形状,则必须每隔一段时间移动它们以使它们更快.
但是像你一样添加一个计时器并不是在WPF中创建动画的最佳方法.
有几种选择:
>为每个形状指定一个速度(类似于:每秒10个单位),然后每次更新屏幕时,根据自上次移动自上次移动的时间及其速度移动形状.所以你需要跟踪经过的时间.>创建故事板,他们有自己的计时器(时间轴),所以你要做的就是设置开始和结束位置并指定持续时间,最后播放动画.