public void Shoot(string text, int type) { var line = usableLine(); if (line == -1) { clearLine(); line = usableLine(); } FrameworkElement danmaku = new OutlinedDanmaku(text); // Danmaku initilization and display if (enableShadowEffect) { danmaku = new ShadowDanmaku(text); } //添加emoji类型判断条件 if() if (type == 1) { danmaku = new EmojiDanmaku(text);//text 传path } danmaku.Margin = new Thickness(0, lineLocationY(line), 0, 0); container.Children.Add(danmaku); // Initilizing animation var anim = new DoubleAnimation(); anim.From = this.container.RenderSize.Width; anim.To = -danmaku.DesiredSize.Width - 1600; anim.SpeedRatio = danmaku.DesiredSize.Width > 80 ? (.05 * (danmaku.DesiredSize.Width / 1500 + 1)) : (.1 * ((100 - danmaku.DesiredSize.Width) / 100 + 1)); TranslateTransform trans = new TranslateTransform(); danmaku.RenderTransform = trans; // Handling the end of danmaku anim.Completed += new EventHandler(delegate(Object o, EventArgs a) { container.Children.Remove(danmaku); }); // Managing the danmaku lines var timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(300); timer.Tick += new EventHandler(delegate(Object o, EventArgs a) { Point relativePoint = danmaku.TransformToAncestor(container) .Transform(new Point(0, 0)); if (relativePoint.X < container.ActualWidth - danmaku.DesiredSize.Width - 50) { timer.Stop(); isOccupy[line] = false; } }); timer.Start(); // Play animation trans.BeginAnimation(TranslateTransform.XProperty, anim); }
public void Shoot(string text) { var line = usableLine(); if (line == -1) { clearLine(); line = usableLine(); } FrameworkElement danmaku = new OutlinedDanmaku(text); // Danmaku initilization and display if (enableShadowEffect) { danmaku = new ShadowDanmaku(text); } danmaku.Margin = new Thickness(0, lineLocationY(line), 0, 0); container.Children.Add(danmaku); // Initilizing animation var anim = new DoubleAnimation(); anim.From = this.container.RenderSize.Width; anim.To = -danmaku.DesiredSize.Width - 1600; anim.SpeedRatio = danmaku.DesiredSize.Width > 80 ? (.05 * (danmaku.DesiredSize.Width / 1500 + 1)) : (.1 * ((100 - danmaku.DesiredSize.Width) / 100 + 1)); TranslateTransform trans = new TranslateTransform(); danmaku.RenderTransform = trans; // Handling the end of danmaku anim.Completed += new EventHandler(delegate (Object o, EventArgs a) { container.Children.Remove(danmaku); }); // Managing the danmaku lines var timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(300); timer.Tick += new EventHandler(delegate (Object o, EventArgs a) { Point relativePoint = danmaku.TransformToAncestor(container) .Transform(new Point(0, 0)); if (relativePoint.X < container.ActualWidth - danmaku.DesiredSize.Width - 50) { timer.Stop(); isOccupy[line] = false; } }); timer.Start(); // Play animation trans.BeginAnimation(TranslateTransform.XProperty, anim); }