繁体   English   中英

我的课程无法访问公共变量

[英]Public variable not accessible in my classes

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

感谢您的帮助,谢谢。

我对XNA并不熟悉(尽管我一直想研究它),但是听起来您正在尝试从另一个类中引用一个类的成员。 为此,您必须实际引用第一类。 您说过在主游戏类中声明了screenHeight和screenWidth,但是随后您说您试图在Paddle类中访问它们。 但是,如果使用“ this”,则无论如何调用,您都只能访问Paddle的成员,而不能访问“ main game”类的成员。 如果要查看其主要成员,则需要引用一些对主游戏类的引用(而不是“ this”)。

例子:

错误:

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;
  }
}

我一直认为将变量设置为public可以使其在任何地方都可以访问?

public使该字段可从其他类访问,但是您仍然需要对该实例的引用 由于需要,在Paddle类中的某个位置应该存在对Breakout的引用。 例如,通过在实例化Paddle时分配一个名为Breakout类型的字段。 然后,可以从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中instanceBreakout ,因为我不确定当前如何实例化您的游戏类。

您需要创建一个Breakout类的实例。

Breakout breakout = new Breakout();

然后,您可以访问该对象的公共字段。

int height = breakout.screenHeight;

使其成为公共静态

SOOOO ...

public static int screenWidth;

然后只写paddle.maxY = Breakout.screenWidth;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM