public override void ChangeAttack(ATKSTATETYPE state, Vector2D vct) { base.ChangeAttack(state, vct); //生成一个攻击判定组件 //1阶技能组件 if (state == ATKSTATETYPE.First) { Entities.Players.WriggleCmp1 cmp = new Entities.Players.WriggleCmp1(texturemanager, vct, 50); AttackComponents.Add(cmp); } //2阶技能组件 if (state == ATKSTATETYPE.Second) { Entities.Players.WriggleCmp1 cmp = new Entities.Players.WriggleCmp1(texturemanager, vct); AttackComponents.Add(cmp); } //3阶技能组件 if (state == ATKSTATETYPE.Third) { Entities.Players.WriggleCmp1 cmp = new Entities.Players.WriggleCmp1(texturemanager, vct); AttackComponents.Add(cmp); } //最终技能组件 if (state == ATKSTATETYPE.Final) { Entities.Players.WriggleCmp1 cmp = new Entities.Players.WriggleCmp1(texturemanager, vct); AttackComponents.Add(cmp); } }
//攻击连击 public void Attack() { //第一次 if (attackState == ATKSTATETYPE.None) { if (allowAttackRush) { attackState = ATKSTATETYPE.First; //不允许一次较短时间内重复放出基础技能 allowAttackRush = false; } } //第二次触发一阶攻击 else if (attackState == ATKSTATETYPE.First) { attackState = ATKSTATETYPE.Second; //攻击态复位 attackCaculateTime = 0; } else if (attackState == ATKSTATETYPE.Second) { attackState = ATKSTATETYPE.Third; //攻击态复位 attackCaculateTime = 0; } else if (attackState == ATKSTATETYPE.Third) { attackState = ATKSTATETYPE.Final; //攻击态复位 attackCaculateTime = 0; } else if (attackState == ATKSTATETYPE.Final) { attackState = ATKSTATETYPE.None; attackCaculateTime = 0; } CurrentCharactor.ChangeAttack(attackState, Position); }
//更新连击(产生攻击间隔判定) void UpdateAttack(double elapsedTime) { //如果一直保持某种攻击态,则过一段时间后状态还原 if (attackState != ATKSTATETYPE.None) { attackCaculateTime += elapsedTime; if (attackCaculateTime > attackRefreshTime) { attackCaculateTime = 0; attackState = ATKSTATETYPE.None; } } //如果不允许重置攻击,则进行重置记录 if (allowAttackRush == false) { attackCDCaculate += elapsedTime; if (attackCDCaculate >= attackCD) { allowAttackRush = true; attackCDCaculate = 0; } } }
/// <summary> /// 切换攻击形态 /// </summary> /// <param name="state">更换的形态状态标记</param> /// <param name="vct">技能所要追随的Vector2D组件</param> public virtual void ChangeAttack(ATKSTATETYPE state,Vector2D vct) { }
public override void ChangeAttack(ATKSTATETYPE state,Vector2D vct) { base.ChangeAttack(state,vct); //生成一个攻击判定组件 //1阶技能组件 if (state == ATKSTATETYPE.First) { Entities.Players.WriggleCmp1 cmp = new Entities.Players.WriggleCmp1(texturemanager, vct,50); AttackComponents.Add(cmp); } //2阶技能组件 if (state == ATKSTATETYPE.Second) { Entities.Players.WriggleCmp1 cmp = new Entities.Players.WriggleCmp1(texturemanager, vct); AttackComponents.Add(cmp); } //3阶技能组件 if (state == ATKSTATETYPE.Third) { Entities.Players.WriggleCmp1 cmp = new Entities.Players.WriggleCmp1(texturemanager, vct); AttackComponents.Add(cmp); } //最终技能组件 if (state == ATKSTATETYPE.Final) { Entities.Players.WriggleCmp1 cmp = new Entities.Players.WriggleCmp1(texturemanager, vct); AttackComponents.Add(cmp); } }
//攻击连击 public void Attack() { //第一次 if (attackState == ATKSTATETYPE.None) { if (allowAttackRush) { attackState = ATKSTATETYPE.First; //不允许一次较短时间内重复放出基础技能 allowAttackRush = false; } } //第二次触发一阶攻击 else if (attackState == ATKSTATETYPE.First) { attackState = ATKSTATETYPE.Second; //攻击态复位 attackCaculateTime = 0; } else if (attackState == ATKSTATETYPE.Second) { attackState = ATKSTATETYPE.Third; //攻击态复位 attackCaculateTime = 0; } else if (attackState == ATKSTATETYPE.Third) { attackState = ATKSTATETYPE.Final; //攻击态复位 attackCaculateTime = 0; } else if (attackState == ATKSTATETYPE.Final) { attackState = ATKSTATETYPE.None; attackCaculateTime = 0; } CurrentCharactor.ChangeAttack(attackState,Position); }
/// <summary> /// 切换攻击形态 /// </summary> /// <param name="state">更换的形态状态标记</param> /// <param name="vct">技能所要追随的Vector2D组件</param> public virtual void ChangeAttack(ATKSTATETYPE state, Vector2D vct) { }