步驟二,跑向敵人時,只要敵人進入攻擊范圍時即發起攻擊:
/// <summary>
/// 判斷是否將要向鎖定對象發起攻擊
/// </summary>
private bool WillAttack(QXSpirit attacker, QXSpirit defenser) {
return defenser == null ? false : Super.InCircle(attacker.X, attacker.Y, defenser.X, defenser.Y, attacker.AttackRange);
}
/// <summary>
/// 判斷點是否在圓內
/// </summary>
/// <param name="targetX">目標點X坐標</param>
/// <param name="targetY">目標點Y坐標</param>
/// <param name="centerX">圓心X坐標</param>
/// <param name="centerY">圓心X坐標</param>
/// <param name="radius">圓半徑</param>
/// <returns></returns>
public static bool InCircle(double targetX, double targetY, double centerX, double centerY, double radius){
return Math.Pow(targetX - centerX, 2) + Math.Pow(targetY - centerY, 2) <= Math.Pow(radius, 2) ? true : false;
}
我設定的主角發起實質性攻擊的前提條件是:主角進入為以敵人腳底為圓心以主角攻擊距離(范圍)為半徑的圓內:
通過圓來構造攻擊范圍並實施判斷在范圍型攻擊魔法中同樣被廣泛應用到,這是後話了。
步驟三,當主角向敵人揮劍並擊中對方時,運行計算公式並顯示傷害輸出。這裡涉及到精靈動作的分幀處理(分幀處理架構的優勢在此體現得淋漓盡致),也就是根據精靈當前動作的進度來實現相應功能。舉個最簡單的例子,當精靈死亡時會運行死亡的一系列動作幀,當播放到最後一幀(精靈躺在地上)時才算真正的死亡,此後我們才會對其進行例如線程釋放、控件移除等相關處理:
本游戲中的主角攻擊動作由7幀組成,當播放到第6幀時才會實質性的對敵人產生傷害: