2012-10-15 32 views
-2

我遇到了Windows Phone的C#和XNA问题。我创建了一个名为Item的类,它在XNA的Game1类中。我遇到的问题是,在创建所有项目后,我无法对其进行更改,但不会引发错误,但更改也不会生效。因此,代码是这样的:我无法对类中的成员进行更改

public class Game1 : Microsoft.Xna.Framework.Game { 
    Item Loading; 
    Item[] Stuff = new Item[2]; 

    public class Item { 
    public bool visible = true; 
    } 

    protected override void LoadContent() { 
    Loading = new Item(); 
    Stuff[1] = new Item(); 
    } 

    protected override void Update(GameTime gameTime) { 
    Loading.visible = false; 
    System.Diagnostics.Debug.WriteLine(Loading.visible); //prints true 
    Stuff[1].visible = false; 
    System.Diagnostics.Debug.WriteLine(Stuff[1].visible); //prints false 
    } 
} 

我不明白为什么这是无法改变的变量,我也试图通过在类中的存取方法这样做。我已经基本上复制了一系列Items的代码,所以这让我完全陷入了困境。

+0

你能向我们展示'Item'类中的存取方法吗? – paul

+0

“变量”是什么意思?在OOP中,我们避免使用术语“变量”,我们说“成员”指的是属于类的东西,一些特殊的memebr类型是方法(函数)和属性。哟不能访问课堂以外的“加载”和“材料”,因为默认情况下,成员对班级是私人的。如果你想从Loading和Stuff中获取值,你应该声明它们是公开的(坏方法),或者为成员创建public(可能是只读)属性(访问器)。 –

+0

@ Y.Ecarri'Update'方法是Game1类的一部分,因此它可以访问私有成员'Loading'和'Stuff []'。这不是问题。 –

回答

0

此代码有效。我删除了继承约束,但它也应该与他们一起工作。我看到的主要问题是你宣布“东西”的方式。我不确定你使用的是什么版本的C#,但据我所知(VS2010),你不能像你在C/C++中那样声明一个数组。您必须使用new关键字初始化阵列。

public class Game1 
{ 
    Item Loading; 
    Item[] Stuff; 

    public class Item 
    { 
     public bool visible = true; 
    } 

    public void LoadContent() 
    { 
     Loading = new Item(); 
     Stuff = new Item[2]; 
     Stuff[1] = new Item(); 
    } 

    public void Update(DateTime gameTime) 
    { 
     Loading.visible = false; 
     System.Diagnostics.Debug.WriteLine(Loading.visible); //prints false 

     Stuff[1].visible = false; 
     System.Diagnostics.Debug.WriteLine(Stuff[1].visible); //prints false 
    } 
} 
+0

感谢您的输入。我打错了我的代码,它不是逐字拷贝。我终于找出了错误,这是一个'我'的错误: - \我设法有两个竞争的布尔开关,并没有注意到它来回翻转。 – scape