C# 赋值后的属性值错误-C
我偶然发现了这个问题,在我的角色类中,我给属性CurrentHp赋值,但该值不正确,并且与右侧不匹配 角色类继承自GameEntity,两个类的代码如下所示: 配子实体C# 赋值后的属性值错误-C,c#,.net,C#,.net,我偶然发现了这个问题,在我的角色类中,我给属性CurrentHp赋值,但该值不正确,并且与右侧不匹配 角色类继承自GameEntity,两个类的代码如下所示: 配子实体 public abstract class GameEntity { public int BaseDmgMin { get; set; } public int BaseDmgMax { get; set; } public virtual int CurrentHp { get; set; }
public abstract class GameEntity
{
public int BaseDmgMin { get; set; }
public int BaseDmgMax { get; set; }
public virtual int CurrentHp { get; set; }
public int MaxHp { get; set; }
public bool IsDead()
{
if (CurrentHp < 1)
{
return true;
}
else
{
return false;
}
}
public abstract int TakeDamage(int damage);
public abstract int Attack();
}
当我逐步浏览代码时,我看到以下内容:
1:CurrentHp的值为0,但应为25。
2:CurrentHp现在的值为100,不需要执行更多的CurrentHp赋值。
我错过了什么或者我做错了什么?
非常感谢您提供的所有帮助:您应该创建一个专用字段来存储CurrentHp的实际值并使用它。它是否发生在同一个块中,针对同一个字符?如果是这样,您的数据行是否可能在字符映射过程中发生更改,比如某种异步操作?随机猜测,但我打赌这与您在var interval=intdiffMilli.TotalMinutes/5上的整数除法有关;在里面TimeHealth@Mickael是的,它发生在同一个角色身上。我不会对我所知道的进行任何异步调用。@Scott Chamberlain我认为这并不重要,因为它是get的一部分,而不是集合的一部分
public class Character : GameEntity
{
public Character(String CharacterName, int Exp, int Gold) : this()
{
this.CharacterName = CharacterName;
this.Exp = Exp;
this.Gold = Gold;
}
public Character(){
Inventory = new Inventory();
}
public Guid CharacterID { get; set; }
public string CharacterName { get; set; }
public int Exp { get; set; }
public int Gold { get; set; }
public Weapon Weapon { get; set; }
public Shield Shield { get; set; }
public Inventory Inventory { get; set; }
public int Level { get; set; }
public DateTime LastHealthUpdate { get; set; }
public bool InFight { get; set; }
public override int CurrentHp
{
get
{
if (!InFight)
{
var timeHealth = TimeHealth();
if (timeHealth > 0)
{
LastHealthUpdate = DateTime.Now;
base.CurrentHp = (base.CurrentHp + timeHealth) > MaxHp ? MaxHp : base.CurrentHp + timeHealth;
}
}
return base.CurrentHp;
}
set{ base.CurrentHp = value; }
}
public void UpdateHealth()
{
var a = CurrentHp;
}
public override int Attack()
{
Random r = new Random();
int hitDamage = r.Next(BaseDmgMin, BaseDmgMax);
if (Weapon != null)
hitDamage += Weapon.Damage;
return hitDamage;
}
public int TimeHealth()
{
var diffMilli = DateTime.Now - LastHealthUpdate;
var intervals = (int)diffMilli.TotalMinutes / 5;
return intervals;
}
public int GoldLoss()
{
int gold = Gold;
Random r = new Random();
int multiplier = r.Next(30, 50);
gold = (gold * multiplier) / 100;
Gold -= gold;
return gold;
}
public int ExpLoss()
{
var expLoss = Convert.ToInt32(Exp * 0.9);
Exp -= expLoss;
return expLoss;
}
public void GoldGain(int gold) {
this.Gold += gold;
}
public void ExpGain(int exp) {
this.Exp += exp;
}
public override int TakeDamage(int damage)
{
if (Shield != null)
damage = (damage - Shield.Armor > 0) ? damage - Shield.Armor : 0;
CurrentHp = (CurrentHp - damage > 0) ? CurrentHp - damage : 0;
return damage;
}
}