2)混
本示例教程中我將之定義為使精靈隨機亂向跑動。此附加屬性非常有趣,實現起來也很簡單,我們只需將精靈的移動目標進行重新隨機更改,即為直線移動方法與A*移動方法開頭添加如下一個判斷處理即可:
if (spirit.ExtraTime[1] > 0) {
p = new Point(p.X + (p.X > spirit.X ? -random.Next(200) : random.Next(200)),
p.Y + (p.Y > spirit.Y ? -random.Next(200) : random.Next(200)));
}
測試效果截圖:
3)冰:
本示例教程中我將之定義為使精靈移動速度、攻擊速度、施法速度減速。大家回憶一下第二十八節中關於精靈屬性的設計,其中精靈的所有類型屬性均由4個部分組成,以下為這3個速度屬性的構造定義:
/// <summary>
/// 獲取跑步速度(每移動一個單元格的花費時間,越小越快)
/// </summary>
public double VRunSpeed {
get { return ABase[5] + Equip[5] + Buff[5] - VAgile * CoefficIEnt[5]; }
}
/// <summary>
/// 獲取物攻速度(越小越快)
/// </summary>
public double VAttackSpeed {
get { return ABase[6] + Equip[6] + Buff[6] - VAgile * CoefficIEnt[6]; }
}
/// <summary>
/// 獲取施法速度(越小越快)
/// </summary>
public double VMagicSpeed {
get { return ABase[7] + Equip[7] + Buff[7] - VAgile * CoefficIEnt[7]; }
}
其中的Buff即為附加屬性影響的部分。了解了原理,將之轉換成機器語言即為:
enemy.Buff[5] = enemy.ExtraEffect[magic.ExtraAttribute];
enemy.Buff[6] = enemy.ExtraEffect[magic.ExtraAttribute];
enemy.Buff[7] = enemy.ExtraEffect[magic.ExtraAttribute];
當判斷冰凍持續時間減為0後,我們只需更新這3個Buff值歸0即可。是不是很方便?嘿嘿,同時也證明了第二十八節我對精靈屬性結構設計定義的正確性。
測試效果截圖: