0

単一のゲームを作成しようとしていますが、ここで少し問題が発生しました...他のピクチャボックスを避けるために、矢印キーでピクチャボックスを移動しています...問題は、ピクチャボックスがフォームから移動することです左キーを何度も押すと...右側でこの問題を解決することに成功しましたが(別のピクチャボックスでピクチャボックスをブロックすることで)、左側のバージョンはまだ機能せず、理由がわかりません...

コードは次のとおりです。

if (pictureBox7.Bounds.IntersectsWith(pictureBox1.Bounds))
            switch (e.KeyCode)
            {
                case Keys.Escape: Application.Exit(); break;
                case Keys.P: timerkunai1.Enabled = false;
                    timerkunai2.Enabled = false; timerkunai3.Enabled = false;
                    timerkunai4.Enabled = false; timerninja.Enabled = false;
                    timerlife.Enabled = false;
                    button3.Show(); break;
                case Keys.Right: i = 6; dx = 25; press = true; break;            
            }
        if (pictureBox8.Bounds.IntersectsWith(pictureBox1.Bounds))
            switch (e.KeyCode)
            {
                case Keys.Escape: Application.Exit(); break;
                case Keys.P: timerkunai1.Enabled = false;
                    timerkunai2.Enabled = false; timerkunai3.Enabled = false;
                    timerkunai4.Enabled = false; timerninja.Enabled = false;
                    timerlife.Enabled = false;
                    button3.Show(); break;
                case Keys.Left: i = 0; dx = -25; press = true; break;
            }
        else
            switch (e.KeyCode)
        {
            case Keys.Escape: Application.Exit(); break;
            case Keys.P: timerkunai1.Enabled = false;
                timerkunai2.Enabled = false; timerkunai3.Enabled = false;
                timerkunai4.Enabled = false; timerninja.Enabled = false;
                timerlife.Enabled = false;
                button3.Show(); break;
            case Keys.Left: i = 0; dx = -25; press = true; break;
            case Keys.Right: i = 6; dx = 25; press = true; break;
        }
4

2 に答える 2

0

ピクチャボックスの境界がフォームの外側にあるかどうかを確認するコードが必要です。ピクチャボックスの動きによって境界外になる場合は、動きを防ぎます。この疑似コードのようなもの: if (pictureBoxZ + dx < 0 || pictureBoxZ + dx > pictureBoxZ.Parent.Width) { //Deny Motion }

于 2013-04-26T15:34:39.757 に答える
0

dx 変数は、PictureBox の新しい場所へのオフセットですか? 次に、Location.x を 0 に制限します。

 if (pictureBox1.Location.x + dx > 0)
     pictureBox1.Location += dx;

左右のサイズをフォームの幅に制限する場合は、次のコードを使用します。

if ((pictureBox1.Location.x + dx > 0) && (pictureBox1.Location.x + dx < this.Size.Width - pictureBox1.Size.Width))
     pictureBox1.Location += dx;
于 2013-04-26T15:43:53.833 に答える