public override void Run(Sprite caster, Scene scene, MagicArgs args) { Animation magic = new Animation() { Code = args.Code, Coordinate = args.Coordinate, Z = args.Z }; EventHandler handler = null; magic.Disposed += handler = delegate { magic.Disposed -= handler; scene.RemoveAnimation(magic); }; scene.AddAnimation(magic); Animation animation = new Animation() { Code = 11, Coordinate = args.Coordinate }; EventHandler animationHandler = null; animation.Disposed += animationHandler = delegate { animation.Disposed -= animationHandler; scene.RemoveAnimation(animation); }; scene.AddAnimation(animation); //捕获圆范围内将要伤害的精灵表 for (int i = 0; i < scene.sprites.Count; i++) { if (scene.sprites[i].IsVisible && caster.IsHostileTo(scene.sprites[i].Camp)) { if (scene.sprites[i].InCircle(Scene.GetGameCoordinate(args.Coordinate), args.Radius)) { Targets.Add(scene.sprites[i]); } } } int count = 0; int number = args.Number; EventHandler timerHandler = null; DispatcherTimer timer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(350) }; timer.Tick += timerHandler = delegate { if (count == args.Number) { timer.Tick -= timerHandler; timer.Stop(); Targets.Clear(); } else { count++; if (count > 1) { args.SpecialEffect = SpecialEffects.None; scene.Shake(15, 10); } //对精灵表中所有精灵进行魔法/技能伤害 foreach (Sprite sprite in Targets) { caster.CastingToHurt(sprite, args); } } }; timer.Start(); }