微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#移动折线

我是C#图形编程的新手.昨天我开始了一个新项目( WPF).有一个polyline对象,我必须沿着屏幕移动我正在计算的坐标.我不知道如何移动对象并制作类似动画的东西.在鼠标按下时我想启动此方法Move()之后进入while循环并且条件完成时(end == true)我想结束循环并完成动画.当我在循环中时,我的想法是以慢动作移动我的折线.我试图将Move()放入一个线程并使用Thread.Sleep(…);但我只能看到polyline的最终位置.
我试着将它放入新的Thread(新的ThreadStart(Move)); …和this.dispatcher.BeginInvoke,效果是一样的.
你能告诉我,我怎么能做这个动作?

public void Move()
     {
        bool end = false;
        while (!end)
        {
            double x = lastPosX;
            double y = lastPosY;

            double a = y1 - y;
            double b = x - x1;
            double c = -x * y1 + x1 * y;

            double u,v;
            GetC(out u,out v);                    

            if (y1 < lastPosY)
            {
                GetCoordinates(ref u,ref v);
            }

            if (u > width || v > height)
            {
                 gameEnd = true;
            }

            lastPosX = u;
            lastPosY = v;

            p.Points.Remove(p.Points.First());
            p.Points.Add(new Point(u,v));

          }

       }

解决方法

我无法弄清楚你的Move方法是如何工作的,但这里是一个如何在MouseDown上将polyline从左向右移动的示例.希望您能够根据自己的需求进行调整

XAML

<Canvas Name="myCanvas">
    <polyline Name="mypolyline"
              MouseDown="polyline_MouseDown"
              Canvas.Left="75"
              Canvas.Top="50"
              Points="25,25 0,50 25,75 50,25 25,0" 
              stroke="Blue"
              strokeThickness="10"/>
</Canvas>

代码背后

private void polyline_MouseDown(object sender,MouseButtonEventArgs e)
{
    double left = Canvas.GetLeft(mypolyline);
    var animationThread = new Thread(new ThreadStart(() =>
    {
        while (left < 300)
        {
            left += 10;
            // SetLeft is done in the UI thread
            dispatcher.Invoke(new Action(() =>
            {
                Canvas.SetLeft(mypolyline,left);
            }));
            Thread.Sleep(50);
        }
    }));
    animationThread.Start();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐