2

スペースインベーダーを作っていて、大砲の位置から弾丸が出てくるようにしたいです。スペースを押すと弾丸が発射されますが、スペースを押すたびにキャノンXの場所にアクセスできるようにする必要がありますが、その情報にアクセスできません。

    public void tsbtnStart_Click(object sender, EventArgs e)
    {

        // Make invader

            Invader invaderX = new Invader();
            pnlBattleField.Controls.Add(invaderX);

        // Mke UFO

            Ufo ufoX = new Ufo();
            pnlBattleField.Controls.Add(ufoX);


        // Make cannon
            Cannon cannonX = new Cannon(this.pnlBattleField.Height - 80);

        if (made == false)
        {
            pnlBattleField.Controls.Add(cannonX);
            made = true;

        }
        Point location = cannonX.PointToScreen(Point.Empty);


        tmrClock.Interval = 200;
        tmrClock.Start();
        tmrClock2.Interval = 100;
        tmrClock2.Start();
    }

    public void Form1_KeyPress(object sender, KeyPressEventArgs e)
    {

        if (e.KeyChar == (char)Keys.Space)
        {

            Bullet bulletX = new Bullet(this.pnlBattleField.Height - 80, location.x );
            // "location does not exist in current context

            pnlBattleField.Controls.Add(bulletX);
        }

    }
4

2 に答える 2

0

さて、あなたは宣言します

Point location = cannonX.PointToScreen(Point.Empty);

あなたの方法で:

public void tsbtnStart_Click(object sender, EventArgs e)

この場所は、最初にクラス メンバーで宣言する必要があります。その後、彼の値を正しい値で上書きします。

そのようです :

private Point location = new Point();
location = cannonX.PointToScreen(Point.Empty); // in your method
于 2013-04-23T16:59:00.600 に答える
0

locationcannonXは のローカル変数でtsbtnStart_Clickあるため、戻ると存在しなくなりtsbtnStart_Clickます。それらをクラスのプロパティにして、永続化し、Form1_KeyPressおよび他のメソッドでアクセスできるようにします。

于 2013-04-23T16:57:09.550 に答える