苦労している問題があります。キーボードを使用して画像を左、右、上または下、斜めに移動したいです。ウェブを検索したところ、2 つの異なるキーを使用するには、前のキーを覚えておく必要があることがわかりました。そのために、bool 辞書を使用しています。
私のメイン Form クラスでは、これは 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());
}
私のペイントイベント:
private void carBox_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(Car, baseCar.CharPosX, baseCar.CharPosY); // Car is just an image
}
そして私のbaseCarクラス:
プライベート Dictionary KeysD = new Dictionary(); // KeysD.Add("w",false) のように、W|A|S|D キーを設定するメソッドがあります。
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;
}
とにかく動作しますが、私の問題は、たとえば最初に押されたキーに戻れないことです:
W を押して上に移動し、D キーを押して対角線に移動しましたが、D キーを離しても、KeyDown イベントが「死んで」おり、carAccelerate() メソッドを再度呼び出さないため、再び上に移動しません。それを修正する方法を理解していない..
誰でも私を助けてもらえますか?キーを処理するためのより良い方法があるかもしれませんか?私はどんなアイデアにもオープンです!そして、あなたがそれを理解してくれることを願っています、私の英語は最高ではありません:S