我正在使用XNA框架制作我的第一个游戏之一。在它的主要游戏类(Breakout.cs
)中,我把它放在:
public int screenHeight;
public int screenWidth;
在Initialize
方法中:
this.screenHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height;
this.screenWidth = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
但是当我尝试从我的Paddle
课程中访问它时,我收到此错误:
The name 'screenWidth' does not exist in the current context
我一直认为将变量设置为public会使其可以在任何地方访问?
感谢帮助,谢谢。
答案 0 :(得分:2)
我不熟悉XNA(虽然我一直想调查它),但听起来你正试图从另一个类中引用一个类的成员。为此,您必须实际引用第一个类。你说screenHeight和screenWidth是在主游戏类中声明的,但是你说你试图在Paddle类中访问它们。但是如果你使用“this”,你只能访问Paddle的成员,而不是“主游戏”类的成员,无论是什么叫做。如果你想看到它的成员,你需要引用一些对主游戏类的引用(而不是“this”)。
示例:
WRONG:
class MyGame
{
public int screenWidth;
public int screenHeight;
void MainLoop()
{
Paddle p = new Paddle();
}
}
class Paddle
{
void Initialize()
{
int w = screenWidth;
int h = screenHeight;
}
}
更好:
class MyGame
{
public int screenWidth;
public int screenHeight;
void MainLoop()
{
Paddle p = new Paddle(this);
}
}
class Paddle
{
MyGame game;
public Paddle(MyGame game)
{
this.game = game;
}
void Initialize()
{
int w = game.screenWidth;
int h = game.screenHeight;
}
}
答案 1 :(得分:2)
我一直认为将变量设置为public会使其可以在任何地方访问?
public
可以从其他类访问该字段,但您仍需要实例的引用。在课程Paddle
的某个地方,由于您需要它,因此应该存在一个返回Breakout
的引用。例如,通过在实例化Breakout
时分配一个名为“breakout”的Paddle
类型的字段。然后,从Paddle
,您可以致电breakout.screenHeight
。
另一种选择是让Breakout
成为单身人士(你有没有更多?)。声明一个静态字段,并在构造时将Breakout实例存储在那里。然后公开Instance
属性:
private static Breakout instance = new Breakout();
public static Breakout Instance
{
get { return instance; }
}
然后从Paddle
:
Breakout.Instance.screenHeight
不确定您是否希望instance
在intiailizer中实例化Breakout
,因为我不确定您的游戏类目前是如何实例化的。
答案 2 :(得分:0)
您需要创建一个Breakout类的实例。
Breakout breakout = new Breakout();
然后您可以访问该对象的公共字段。
int height = breakout.screenHeight;
答案 3 :(得分:0)
将其设为公共静态
... SOOOO
public static int screenWidth;
然后只写paddle.maxY = Breakout.screenWidth;