我正在使用(到目前为止,只有水)制作粒子游戏,并且元素内的 Draw() 方法非常慢,同时有几个。我认为这是因为它每秒计算太多,但我仍然很不满意,因为它们只是基本的 2D 形状。我怎样才能让它更有效率?
这是我的代码:
(循环)(每 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 中创建动画的最佳方式。
有几个选项:
关于c# - 有什么方法可以更快地在 Canvas 上渲染大量移动对象(C# w/WPF),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5688627/