我是C#图形编程的新手。昨天我开始了一个新项目(WPF)。有一个Polyline对象,我必须沿着屏幕移动我正在计算的坐标。我不知道如何移动对象并制作类似动画的东西。在鼠标按下时我想在进入while循环之后启动此方法Move()
并且当条件完成时(end == true)
我想结束循环并完成动画。当我在循环中时,我的想法是以慢动作移动我的折线。我试图将Move()
放入一个帖子并使用Thread.Sleep(...);
,但我可以看到最终位置不是Polyline的全部方式。
我试着把它放进new Thread(new 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));
}
}
答案 0 :(得分:1)
我无法弄清楚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,50 25,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();
}