尝试在2个类中使用bool的问题

时间:2015-12-07 12:05:46

标签: c# xna boolean

我正在尝试添加一个仅限于我的游戏的活动盾牌,但是现在它因某些原因无法正常工作而且我无法找出原因。

首先,这是盾牌类:

class Shield : SpriteGameObject
{
protected float counter;
protected float limit;
public bool isShieldOn;
protected bool startCounting;

public Shield(int layer = 0, string id = "") : base("Sprites/spr_shield", layer, id) 
{
    counter = 0;
    limit = 5;
    isShieldOn = false;
    startCounting = false;
}

public override void Update(GameTime gameTime)
{
    //Stuff here

    while (startCounting)
        counter += (float)gameTime.ElapsedGameTime.TotalSeconds;

    if (counter >= limit)
    {
        isShieldOn = false;
        counter = 0;
        startCounting = false;
    }

    Player player = GameWorld.Find("player") as Player;
    if (this.visible && this.CollidesWith(player))
    {
        isShieldOn = true;
        startCounting = true;
        this.visible = false; GameEnvironment.AssetManager.PlaySound("Sounds/snd_shieldcollected");
    }
}
}

现在,当玩家触摸盾牌时,游戏会冻结,但这与包含计数器的while语句有关。我不知道为什么,但首先让我解释一下isShieldOn bool我一直遇到问题。

这里是使用isShieldOn bool:

class Health : GameObjectList
{
Shield shield;

public Health(int layer = 3, string id = "") : base(layer, id) 
{
    //Stuff here

    shield = new Shield(1, "shields");
}

public override void Update(GameTime gameTime)
{
    base.Update(gameTime);
    if (shield.isShieldOn == false)
    {
        //Remove health
    }
}
}

当我在构造函数中给它赋值true时,屏蔽工作。但是,如果我尝试在Shield类的Update方法中为它分配if语句,则不会成为现实。我100%确定是否执行了if语句,因为当触摸时屏蔽确实消失(this.visible = false)并且声音效果起作用。

如果您对如何解决此问题有任何想法,我会非常感谢,如果您对如何修复计时器有所了解。

1 个答案:

答案 0 :(得分:0)

替换

while (startCounting)
    counter += (float)gameTime.ElapsedGameTime.TotalSeconds;

counter += (float)gameTime.ElapsedGameTime.TotalSeconds;
在您的Update方法()中