公共变量在我的类中无法访问

时间:2010-10-09 20:32:57

标签: c# oop xna public

我正在使用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会使其可以在任何地方访问?

感谢帮助,谢谢。

4 个答案:

答案 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;