如何在WinForm中移動屏幕上的任何對象?如何在屏幕上移動對象
當我按下右鍵 - >對象會向右移動,直到我會按任何其他箭頭鍵
,當我按左< - 對象會向左移動,直到我會按任何其他箭頭鍵
所有的時間將是在運動中(像蛇遊戲)的對象
感謝的提前
如何在WinForm中移動屏幕上的任何對象?如何在屏幕上移動對象
當我按下右鍵 - >對象會向右移動,直到我會按任何其他箭頭鍵
,當我按左< - 對象會向左移動,直到我會按任何其他箭頭鍵
所有的時間將是在運動中(像蛇遊戲)的對象
感謝的提前
你需要一個遊戲循環繼續您最初的單一按發起的運動方向一個 按鈕。
您可能想要繼承Form並覆蓋OnPaint方法。您可能還需要每次強制重新繪製Invalidate()。這將設置一個簡單的遊戲循環,並允許您很快更新屏幕。
在您的OnPaint方法中,您將根據自上次調用OnPaint方法以及上次按下哪個鍵以來經過了多長時間來更新對象的位置。您可能會通過使用如下的速度做到這一點:
newPosition = oldPosition + (elapsedTime * velocity)
速度的值將改變根據您按下哪個鍵(即負的左,正右)。您還需要一個變量和一些代碼來跟蹤它是水平移動還是垂直移動。
這是一個性能相當低的方法來完成這個(即它是一個黑客)。如果你想堅持使用Windows,但不需要太多工作就可以獲得更好的性能,你可以看看XNA。如果您想要更好的性能並願意做更多的工作,請使用DirectX和Win32 API查看Interop或將所有內容切換在一起。
捕獲鍵,調整對象座標。
假設您在2D中執行此操作,您可以設置一個x和y更改因子,您可以使用每個箭頭按鍵正確設置。然後設置一個定時器以你想要的速度更新位置。當計時器滴答時,通過x/y變化因子調整對象的位置。
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大小的矩形。默認情況下,我會將該框的位置設置爲向下。但是當您按下任意鍵時,例如: - 如果您按下左鍵箭頭,則鍵事件將會觸發,並且會將框的位置設置爲向左,並且框將開始移動在左側直到按下另一個鍵
添加一些解釋並回答這個答案如何幫助OP修復當前問題 – 2016-01-14 06:49:06
請更改您的主題以更好地反映您的問題。並請添加一個winforms標籤。我可以爲你做這件事,但你現在應該更清楚。 – 2009-04-19 15:00:10