2017-06-22 85 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