我正在制造太空入侵者,我希望我的子弹能够从我的大炮所在的位置出来。当我按空格键时,子弹会发射,但我需要它才能在每次按空格键时访问我的cannonX的位置,它不允许我访问它的信息。
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);
}
}
答案 0 :(得分:0)
location
和cannonX
是tsbtnStart_Click
中的局部变量,因此一旦tsbtnStart_Click
返回就会停止存在。将它们设为您的类的属性,以便它们可以在Form1_KeyPress
和其他方法中保持可访问状态。
答案 1 :(得分: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