当前位置 : 主页 > 手机开发 > 无线 >

有没有办法在Canvas上更快地渲染大量移动对象(C#w / WPF)

来源:互联网 收集:自由互联 发布时间:2021-06-10
我正在制作一个粒子游戏(到目前为止,只有水),并且元素内部的Draw()方法非常慢,只有一些是同时进行的.我认为这是因为它每秒都在计算这么多,但我仍然对它很不满意,因为它们只是基本
我正在制作一个粒子游戏(到目前为止,只有水),并且元素内部的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中创建动画的最佳方法.

有几种选择:

>为每个形状指定一个速度(类似于:每秒10个单位),然后每次更新屏幕时,根据自上次移动自上次移动的时间及其速度移动形状.所以你需要跟踪经过的时间.>创建故事板,他们有自己的计时器(时间轴),所以你要做的就是设置开始和结束位置并指定持续时间,最后播放动画.

网友评论