我有一個問題,我正在努力.. 我想要使用我的鍵盤將圖像移動到左側,右側,上下或對角線方式。 我搜索了網絡,發現,使用2個不同的密鑰我需要記住以前的密鑰,所以爲此我使用了一個bool字典。如何使用2鍵在KeyBoard上移動圖像?
在我的主窗體類這是KeyDown事件的樣子:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
baseCar.carAccelerate(e.KeyCode.ToString().ToLower());
carBox.Refresh(); //carbox is a picturebox in my form that store the image I want to move.
}
我的KeyUp事件:
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
baseCar.carBreak(e.KeyCode.ToString().ToLower());
}
我的Paint事件:
private void carBox_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(Car, baseCar.CharPosX, baseCar.CharPosY); // Car is just an image
}
而且我baseCar等級:
private Dictionary KeysD = new Dictionary(); //有設置在W的方法| A | S | d鍵,如:KeysD.Add( 「W」,假)
public void carAccelerate(string moveDir)
{
KeysD[moveDir] = true;
moveBeta();
}
public void moveBeta()
{
if (KeysD["w"])
{
this.CharPosY -= this.carMoveYSpeed;
}
if (KeysD["s"])
{
CharPosY += carMoveYSpeed;
}
if (KeysD["a"])
{
CharPosX -= carMoveXSpeed;
}
if (KeysD["d"])
{
CharPosX += carMoveXSpeed;
}
}
public void carBreak(string str)
{
KeysD[str] = false;
}
反正它的工作原理,但我的問題是,我可以」 t回到第一個按鍵,例如:
我按下W鍵向上移動,然後按D鍵轉到對角線,當我釋放D鍵時它不會再次上移,因爲KeyDown事件是「死的「並且不會再打電話給carAccelerate()方法.. 我無法弄清楚如何修復它..
任何人都可以幫我嗎? 也許有更好的方法來處理鍵?我打開任何想法! 我希望你能理解它,我的英語不是最好的:S