我正在尝试添加一个仅限于我的游戏的活动盾牌,但是现在它因某些原因无法正常工作而且我无法找出原因。
首先,这是盾牌类:
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)并且声音效果起作用。
如果您对如何解决此问题有任何想法,我会非常感谢,如果您对如何修复计时器有所了解。
答案 0 :(得分:0)
替换
while (startCounting)
counter += (float)gameTime.ElapsedGameTime.TotalSeconds;
到
counter += (float)gameTime.ElapsedGameTime.TotalSeconds;
在您的Update方法()中。