/// <summary>
 /// 移除该控件并发送消息
 /// </summary>
 /// <param name="cs"></param>
 /// <param name="ste">0初始化 1 未被敲击 2 被敲中</param>
 /// <param name="ht"></param>
 private void RemoveAndSendMsg(CadenceSign cs, byte ste, HitType ht)
 {
     LayoutRoot.Children.Remove(cs.currentSign);
     indexActual++;
     cs.state = ste;
     HitArgs ha = new HitArgs();
     ha.HitType = ht;
     OnHit(this, ha);
 }
 /// <summary>
 /// 播放击中光环动画
 /// </summary>
 /// <param name="arg2"></param>
 private void PlayHitFlash(HitArgs arg2)
 {
     if (arg2.DrumType == DrumType.FaceAll || arg2.DrumType == DrumType.SideAll)
     {
         fpPlayer.Play(1);
     }
     else
     {
         fpPlayer.Play(0);
     }
 }
        /// <summary>
        /// 通知有按键按下
        /// </summary>
        /// <param name="key"></param>
        public void NotifyKeyDown(DrumType dt)
        {
            if (SignEnd()) return;
            for (int i = indexActual; i < signCount; )
            {
                if (null == CadenceSigns) return;
                CadenceSign cs = CadenceSigns[i];
                double atime = (lapseTime - arriveEndPointOffset);// / (1 * speed);//当前实际流逝时间

                if (CommHelper.Abs(cs.DelayTimeMill - atime) <= normalArrage)
                {
                    //double lv = Canvas.GetLeft(cs.currentSign);
                    cs.currentSign.Visibility = Visibility.Collapsed;
                    LayoutRoot.Children.Remove(cs.currentSign);
                    indexActual++;
                    cs.state = 2;
                    HitArgs ha = new HitArgs();
                    ha.DrumType = dt;
                    ha.SignSource = cs;
                    ha.HitType = HitType.Normal;
                    if (cs.drumType != DrumType.FaceAll && cs.drumType != DrumType.SideAll)
                    {
                        cs.DelayTimeMill -= (int)(10 * speed);
                    }

                    if (CommHelper.Abs(cs.DelayTimeMill - atime) <= niceArrage)
                    {
                        ha.HitType = HitType.Nice;
                    }

                    //得分算出来后计算按键是否对应
                    if (!KnockKeyIsCodex(cs, dt))
                    {
                        ha.HitType = HitType.Lost;
                    }

                    OnHit(this, ha);
                    return;
                }
                else if (CommHelper.Abs(cs.DelayTimeMill - atime) <= lostArrage)
                {
                    RemoveAndSendMsg(cs, 1, HitType.Lost);
                    return;
                }
                else
                {
                    return;//没有满足的直接跳出
                }
            }
        }
 /// <summary>
 /// 敲击后如果有信号进入范围触发的方法
 /// </summary>
 /// <param name="arg1"></param>
 /// <param name="arg2"></param>
 void cpSignPanel_OnHit(CadencePanel arg1, HitArgs arg2)
 {
     switch (arg2.HitType)
     {
         case HitType.Lost:
             rlsPlayer.Play(HitType.Lost);
             currentGri.BadHits++;
             if (currentGri.MaxDoubleHits < dhtPanel.HitCount) currentGri.MaxDoubleHits = dhtPanel.HitCount;
             dhtPanel.ClearHit();
             break;
         case HitType.Normal:
             dhtPanel.AddHit();
             spScore.AddScore(dhtPanel.HitCount * 20);
             fpScore.AddFetch(dhtPanel.HitCount * 3);
             currentGri.NormalHits++;
             PlayHitFlash(arg2);
             rlsPlayer.Play(HitType.Normal);
             break;
         case HitType.Nice:
             dhtPanel.AddHit();
             spScore.AddScore(dhtPanel.HitCount * 35);
             fpScore.AddFetch(dhtPanel.HitCount * 6);
             currentGri.CoolHits++;
             PlayHitFlash(arg2);
             rlsPlayer.Play(HitType.Nice);
             break;
     }
 }