2009-04-19 182 views
0

如何在WinForm中移動屏幕上的任何對象?如何在屏幕上移動對象

當我按下右鍵 - >對象會向右移動,直到我會按任何其他箭頭鍵

,當我按左< - 對象會向左移動,直到我會按任何其他箭頭鍵

所有的時間將是在運動中(像蛇遊戲)的對象

感謝的提前

+0

請更改您的主題以更好地反映您的問題。並請添加一個winforms標籤。我可以爲你做這件事,但你現在應該更清楚。 – 2009-04-19 15:00:10

回答

0

你需要一個遊戲循環繼續您最初的單一按發起的運動方向一個 按鈕。

1

您可能想要繼承Form並覆蓋OnPaint方法。您可能還需要每次強制重新繪製Invalidate()。這將設置一個簡單的遊戲循環,並允許您很快更新屏幕。

在您的OnPaint方法中,您將根據自上次調用OnPaint方法以及上次按下哪個鍵以來經過了多長時間來更新對象的位置。您可能會通過使用如下的速度做到這一點:

newPosition = oldPosition + (elapsedTime * velocity) 

速度的值將改變根據您按下哪個鍵(即負的左,正右)。您還需要一個變量和一些代碼來跟蹤它是水平移動還是垂直移動。

這是一個性能相當低的方法來完成這個(即它是一個黑客)。如果你想堅持使用Windows,但不需要太多工作就可以獲得更好的性能,你可以看看XNA。如果您想要更好的性能並願意做更多的工作,請使用DirectX和Win32 API查看Interop或將所有內容切換在一起。

0

捕獲鍵,調整對象座標。

0

假設您在2D中執行此操作,您可以設置一個x和y更改因子,您可以使用每個箭頭按鍵正確設置。然後設置一個定時器以你想要的速度更新位置。當計時器滴答時,通過x/y變化因子調整對象的位置。

0
enum position 
    { 
     Left,Right,up,down 
    } 
    private int _x; 
    private int _y; 
    private position _objposition; 
    public Form1() 
    { 
     InitializeComponent(); 
     _x = 50; 
     _y = 50; 
     _objposition = position.down; 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.FillRectangle(Brushes.DarkSlateBlue,_x,_y,100,100); 
    } 

    private void timertick_Tick(object sender, EventArgs e) 
    { 
     if (_objposition == position.Right) 
     { 
      _x += 10; 
     } 
     else if (_objposition == position.Left) 
     { 
      _x -= 10; 
     } 
     else if (_objposition == position.up) 
     { 
      _y -= 10; 
     } 
     else if (_objposition == position.down) 
     { 
      _y += 10; 
     } 
     Invalidate(); 
    } 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Left) 
     { 
      _objposition =position.Left; 
     } 
     else if (e.KeyCode == Keys.Right) 
     { 
      _objposition = position.Right; 
     } 
     else if (e.KeyCode == Keys.Up) 
     { 
      _objposition = position.up; 
     } 
     else if (e.KeyCode == Keys.Down) 
     { 
      _objposition = position.down; 
     } 
    } 
} 

這將創建一個50X50大小的矩形。默認情況下,我會將該框的位置設置爲向下。但是當您按下任意鍵時,例如: - 如果您按下左鍵箭頭,則鍵事件將會觸發,並且會將框的位置設置爲向左,並且框將開始移動在左側直到按下另一個鍵

+0

添加一些解釋並回答這個答案如何幫助OP修復當前問題 – 2016-01-14 06:49:06