13

我想首先说我先搜索过,在其他各种事情上发现了很多类似的问题,但不完全是这个问题。

我有这个代码:

namespace New_Game.GameClasses
{
    /// <summary>
    /// This is a game component that implements IUpdateable.
    /// </summary>
    public class Error : Microsoft.Xna.Framework.GameComponent
    {
        bool gameOver = false;
        List<Enemy> enemies = new List<Enemy>();

        public bool gameOver {
            get { return gameOver; }
            set { gameOver = value; }
        }

        public override void Update(GameTime gameTime, Vector2 target)
        {
            // TODO: Add your update code here
            Rectangle playerRect = new Rectangle((int)target.X, (int)target.Y, 64, 64);

            foreach (Enemy e in enemies)
            {
                e.Target = target;
                e.Update(gameTime);
                Rectangle enemyRect = new Rectangle((int)e.Position.X + 7, (int)e.Position.Y + 7, 32 - 7, 32 - 7);

                if (playerRect.Intersects(enemyRect))
                {
                    gameOver = true;
                }
            }
        }
    }
}

我的问题出现在一个错误中:“New_Game.GameClasses.Error.gameOver”和“New_Game.GameClasses.Error.gameOver”之间的歧义

如果我删除 get/set 方法,当我尝试从我的 Game1.cs 访问 gameOver 时会遇到不同的错误。如果我将其更改为以下内容,则会出现相同的错误:

public bool gameOver { get; set; }

我的问题是如何解决歧义错误?

4

4 回答 4

27

您需要重命名您的私有 gameOver 变量。改变这个:

bool gameOver = false;
public bool GameOver {
        get { return gameOver; }
        set { gameOver = value; }
    }

bool _gameOver = false;
public bool GameOver {
        get { return _gameOver; }
        set { _gameOver = value; }
    }

您不能在单个类中使用相同的变量名。

或者,假设您使用的是最新版本的 .Net,您可以删除您的私有变量并只拥有:

public bool GameOver { get; set; }

祝你好运。

于 2013-01-17T03:35:46.040 回答
2

以不同于公共变量的方式命名您的私有变量。

bool _gameOver = false;

public bool gameOver {
    get { return _gameOver; }
    set { _gameOver = value; }
}
于 2013-01-17T03:36:26.650 回答
2

在我的情况下,通过 agregarPropiedad2重命名类 agregarPropiedad 已解决。

。CS

public partial class agregarPropiedad2

设计师.CS

public partial class agregarPropiedad2

ASPX

Inherits="ProjectName.agregarPropiedad2"
于 2015-04-07T18:07:04.683 回答
1

你不能让你的类的两个组件使用相同的名称。所以改变这个:

bool gameOver = false;

public bool gameOver
{
    get { return gameOver; }
    set { gameOver = value; }
}

对此:

private Boolean m_GameOver = false;

public Boolean GameOver
{
    get { return m_GameOver; }
    set { m_GameOver = value; }
}
于 2013-01-17T03:35:36.833 回答