2017-06-22 44 views
0

我想在WinForm中移动一个形状。我用下面的算法实现它:在WinForm中移动一个形状

virtual public void Move(Graphics g) 
{ 
    Center.X += _dx; 
    if (Center.X - Size/2 < 0) 
    { 
     _dx = _dx * -1; 
    } 
    else if (Center.X + Size/2 > Form1.CanvasWidth) 
    { 
     _dx = _dx * -1; 
    } 

    Center.Y += _dy; 
    if (Center.Y - Size/2 < 0) 
    { 
     _dy = _dy * -1; 
    } 
    else if (Center.Y + Size/2 > Form1.CanvasHeigth) 
    { 
     _dy = _dy * -1; 
    } 
    Draw(g, _currColor); 
} 

其中dx = 1dy = 1。物体按需移动。但我现在想要控制速度在100像素 - 每秒1000像素之间。我尝试更新计时器的时间间隔来实现这一点,但我没有看到任何重大变化。

myTimer.Interval = 1000/SpeedPx; 

哪里SpeedPx是价值之间100 - 1000

private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs) 
{ 
    Form1 mainForm = Application.OpenForms.OfType<Form1>().SingleOrDefault(); 
    using (var g = mainForm.CreateGraphics()) 
    { 
     g.Clear(mainForm._background); 
     mainForm._shapes[mainForm._shapeIndex].Move(g); 
    } 
} 

在我的鼠标点击事件下面几行:

myTimer.Interval = 1000/SpeedPx; 
myTimer.Start(); 
+0

我们看不到你的计时器实际在做什么。显示所有相关的代码。 –

+0

Graphics对象从哪里来? SpeedPx是100 - 1000之间的值,这会使间隔在1到10之间,但最小值为15-25! (定时器不能更快!!) – TaW

+0

@TaW我应该如何实现每秒100-1000像素的速度? –

回答

0

如果它是一个System.Timer那么计时器间隔是以毫秒为单位,所以1000/1000 .. 1000/100会给你1到10毫秒,平均人不会看到太多的差别。

+0

其实你会但系统根本无法做到。 – TaW