private Grid CreateControlNoBorder(DanMuModel model) { //创建基础控件 TextBlock tx = new TextBlock(); Grid grid = new Grid(); //设置控件相关信息 grid.Margin = new Thickness(0, 0, 20, 0); grid.VerticalAlignment = VerticalAlignment.Center; grid.HorizontalAlignment = HorizontalAlignment.Left; if (fontFamily != "默认") { tx.FontFamily = new FontFamily(fontFamily); } tx.Text = model.DanText; tx.FontWeight = FontWeights.Bold; tx.Foreground = model.DanColor; //弹幕大小 double size = double.Parse(model.DanSize); if (size == 25) { tx.FontSize = fontSize; } else { tx.FontSize = fontSize - 2; } grid.Children.Add(tx); return(grid); }
private void TirggerReceiveDanMu(DanMuModel danMuModel) { if (ReceiveDanMu != null) { ReceiveDanMu(danMuModel); } }
static void ShowDanMu(DanMuModel danMuModel) { Console.Write(danMuModel.Time.ToString("HH:mm:ss")); Console.ForegroundColor = ConsoleColor.Red; Console.Write(danMuModel.UserName + ":"); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(danMuModel.Content); Console.ForegroundColor = ConsoleColor.Gray; }
private bool ListenLoop() { Client = new TcpClient(); Client.Connect(ChatServe, Port); NetStream = Client.GetStream(); if (SendJoinChannel(RoomId)) { Coonetced = true; TirggerCoonected(); try { byte[] array = new byte[Client.ReceiveBufferSize]; while (Coonetced) { NetStream.Read(array, 0, 2); var num = BitConverter.ToInt16(array, 0); num = IPAddress.NetworkToHostOrder(num); switch (num) { case 1: { NetStream.Read(array, 0, 4); var onlineNum = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(array, 0)); TirggerOnLineNum(onlineNum); break; } case 2: case 4: { NetStream.Read(array, 0, 2); var size = (short)(IPAddress.NetworkToHostOrder(BitConverter.ToInt16(array, 0)) - 4); var array2 = new byte[size]; NetStream.Read(array2, 0, size); var danMuMsg = Encoding.UTF8.GetString(array2, 0, size); TirggerReceiveDanMu(DanMuModel.CreateModel(danMuMsg)); break; } case 8: NetStream.Read(array, 0, 2); break; default: return(true); } } } catch (Exception) { return(true); } finally { Disconnect(); } } return(true); }
private Grid CreateControlShadow(DanMuModel model) { //创建基础控件 TextBlock tx = new TextBlock(); DropShadowPanel dropShadowPanel = new DropShadowPanel() { BlurRadius = 6, ShadowOpacity = 1, OffsetX = 0, OffsetY = 0, Color = SetBorder(model.DanColor.Color) }; Grid grid = new Grid(); //设置控件相关信息 grid.Margin = new Thickness(0, 0, 20, 0); grid.VerticalAlignment = VerticalAlignment.Center; grid.HorizontalAlignment = HorizontalAlignment.Left; if (fontFamily != "默认") { tx.FontFamily = new FontFamily(fontFamily); } tx.Text = model.DanText; tx.FontWeight = FontWeights.Bold; tx.Foreground = model.DanColor; //弹幕大小 double size = double.Parse(model.DanSize); if (size == 25) { tx.FontSize = fontSize; } else { tx.FontSize = fontSize - 2; } dropShadowPanel.Content = tx; grid.Children.Add(dropShadowPanel); return(grid); }
/// <summary> /// 移除当前屏幕中的弹幕 /// </summary> public void RemoveDanmu(DanMuModel model) { foreach (Grid item in grid_Danmu.Children) { if (item.DataContext == model) { grid_Danmu.Children.Remove(item); } } foreach (Grid item in D_Bottom.Children) { if (item.DataContext == model) { D_Bottom.Children.Remove(item); } } foreach (Grid item in D_Top.Children) { if (item.DataContext == model) { D_Top.Children.Remove(item); } } }
/// <summary> /// 添加滚动弹幕 /// </summary> /// <param name="model">弹幕参数</param> /// <param name="Myself">是否自己发送的</param> public async void AddGunDanmu(DanMuModel model, bool Myself) { try { //创建基础控件 TextBlock tx = new TextBlock(); TextBlock tx2 = new TextBlock(); Grid grid = new Grid(); //设置控件相关信息 grid.Margin = new Thickness(0, 0, 20, 0); grid.VerticalAlignment = VerticalAlignment.Center; grid.HorizontalAlignment = HorizontalAlignment.Left; if (fontFamily != "默认") { tx.FontFamily = new FontFamily(fontFamily); tx2.FontFamily = new FontFamily(fontFamily); } tx2.Text = model.DanText; tx.Text = model.DanText; tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0)); tx.Foreground = model.DanColor; //弹幕大小 double size = double.Parse(model.DanSize); if (size == 25) { tx2.FontSize = fontSize; tx.FontSize = fontSize; } else { tx2.FontSize = fontSize - 2; tx.FontSize = fontSize - 2; } //grid包含弹幕文本信息 if (D_Border) { grid.Children.Add(tx2); } grid.Children.Add(tx); grid.VerticalAlignment = VerticalAlignment.Top; grid.HorizontalAlignment = HorizontalAlignment.Left; TranslateTransform moveTransform = new TranslateTransform(); moveTransform.X = grid_Danmu.ActualWidth; grid.RenderTransform = moveTransform; //将弹幕加载入控件中,并且设置位置 grid_Danmu.Children.Add(grid); Grid.SetRow(grid, row); row++; if (row == maxRow) { row = 0; } tx2.Margin = new Thickness(1); if (Myself) { grid.BorderThickness = new Thickness(2); grid.BorderBrush = new SolidColorBrush(Colors.Gray); } grid.Opacity = Tran; grid.DataContext = model; //更新弹幕UI,不更新无法获得弹幕的ActualWidth grid.UpdateLayout(); D_height = grid.ActualHeight; if (!wCnMdBUG) { SetJJ(); } //SetJJ(); //创建动画 Duration duration = new Duration(TimeSpan.FromSeconds(Speed)); DoubleAnimation myDoubleAnimationX = new DoubleAnimation(); myDoubleAnimationX.Duration = duration; //创建故事版 Storyboard justintimeStoryboard = new Storyboard(); justintimeStoryboard.Duration = duration; myDoubleAnimationX.To = -(grid.ActualWidth);//到达 justintimeStoryboard.Children.Add(myDoubleAnimationX); Storyboard.SetTarget(myDoubleAnimationX, moveTransform); //故事版加入动画 Storyboard.SetTargetProperty(myDoubleAnimationX, "X"); grid_Danmu.Resources.Remove("justintimeStoryboard"); grid_Danmu.Resources.Add("justintimeStoryboard", justintimeStoryboard); justintimeStoryboard.Begin(); //等待,暂停则暂停 await Task.Run(async() => { int i = 0; while (true) { if (!IsPlaying) { await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { justintimeStoryboard.Pause(); }); //break; } else { if (i == Speed * 2) { break; } i++; await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { justintimeStoryboard.Resume(); }); } await Task.Delay(500); } }); grid_Danmu.Children.Remove(grid); } catch (Exception) { } }
/// <summary> /// 添加顶部及底部弹幕 /// </summary> /// <param name="model">弹幕参数</param> /// <param name="istop">是否顶部</param> /// <param name="Myself">是否自己发送的</param> public async void AddTopButtomDanmu(DanMuModel model, bool istop, bool Myself) { TextBlock tx = new TextBlock(); TextBlock tx2 = new TextBlock(); Grid grid = new Grid(); if (fontFamily != "默认") { tx.FontFamily = new FontFamily(fontFamily); tx2.FontFamily = new FontFamily(fontFamily); } tx2.Text = model.DanText; tx.Text = model.DanText; tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0)); tx.Foreground = model.DanColor;//new SolidColorBrush(co[rd.Next(0, 7)]); double size = double.Parse(model.DanSize); if (size == 25) { tx2.FontSize = fontSize; tx.FontSize = fontSize; } else { tx2.FontSize = fontSize - 2; tx.FontSize = fontSize - 2; } //grid包含弹幕文本信息 if (D_Border) { grid.Children.Add(tx2); } grid.Children.Add(tx); // tx.FontSize = Double.Parse(model.DanSize) - fontSize; grid.HorizontalAlignment = HorizontalAlignment.Center; grid.VerticalAlignment = VerticalAlignment.Top; tx2.Margin = new Thickness(1); if (Myself) { grid.BorderThickness = new Thickness(2); grid.BorderBrush = new SolidColorBrush(Colors.Gray); } grid.Opacity = Tran; grid.DataContext = model; grid.UpdateLayout(); D_height = grid.ActualHeight; if (istop) { D_Top.Children.Add(grid); await Task.Delay(5000); if (state == MediaElementState.Paused) { ClearTopButtomDanmuku(); } else { D_Top.Children.Remove(grid); } } else { D_Bottom.Children.Add(grid); await Task.Delay(5000); if (state == MediaElementState.Paused) { ClearTopButtomDanmuku(); } else { D_Bottom.Children.Remove(grid); } } }
/// <summary> /// 添加顶部及底部弹幕 /// </summary> /// <param name="model">弹幕参数</param> /// <param name="istop">是否顶部</param> /// <param name="Myself">是否自己发送的</param> public async void AddTopButtomDanmu(DanMuModel model, bool istop, bool Myself) { //TextBlock tx = new TextBlock(); //TextBlock tx2 = new TextBlock(); //Grid grid = new Grid(); //if (fontFamily != "默认") //{ // tx.FontFamily = new FontFamily(fontFamily); // tx2.FontFamily = new FontFamily(fontFamily); //} //tx2.Text = model.DanText; //tx.Text = model.DanText; //tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0)); //tx.Foreground = model.DanColor;//new SolidColorBrush(co[rd.Next(0, 7)]); //double size = double.Parse(model.DanSize); //if (size == 25) //{ // tx2.FontSize = fontSize; // tx.FontSize = fontSize; //} //else //{ // tx2.FontSize = fontSize - 2; // tx.FontSize = fontSize - 2; //} ////grid包含弹幕文本信息 //if (D_Border) //{ // grid.Children.Add(tx2); //} //grid.Children.Add(tx); //// tx.FontSize = Double.Parse(model.DanSize) - fontSize; //grid.HorizontalAlignment = HorizontalAlignment.Center; //grid.VerticalAlignment = VerticalAlignment.Top; //tx2.Margin = new Thickness(1); //Grid grid = CreateControlV1(model); Grid grid = null; switch (danmuStyle) { case DanmuStyle.Boder: grid = CreateControlBorder(model); break; case DanmuStyle.NoBorder: grid = CreateControlNoBorder(model); break; case DanmuStyle.Shadow: grid = CreateControlShadow(model); break; default: grid = CreateControlBorder(model); break; } grid.VerticalAlignment = VerticalAlignment.Top; grid.HorizontalAlignment = HorizontalAlignment.Center; if (Myself) { grid.BorderThickness = new Thickness(2); grid.BorderBrush = new SolidColorBrush(Colors.Gray); } grid.Opacity = Tran; grid.DataContext = model; grid.UpdateLayout(); //D_height = grid.ActualHeight; if (istop) { D_Top.Children.Add(grid); await Task.Delay(5000); if (state == MediaElementState.Paused) { ClearTopButtomDanmuku(); } else { D_Top.Children.Remove(grid); } } else { D_Bottom.Children.Add(grid); await Task.Delay(5000); if (state == MediaElementState.Paused) { ClearTopButtomDanmuku(); } else { D_Bottom.Children.Remove(grid); } } }
/// <summary> /// 添加滚动弹幕 /// </summary> /// <param name="model">弹幕参数</param> /// <param name="Myself">是否自己发送的</param> public async void AddGunDanmu(DanMuModel model,bool Myself) { try { //创建基础控件 TextBlock tx = new TextBlock(); TextBlock tx2 = new TextBlock(); Grid grid = new Grid(); //设置控件相关信息 grid.Margin = new Thickness(0, 0, 20, 0); grid.VerticalAlignment = VerticalAlignment.Center; grid.HorizontalAlignment = HorizontalAlignment.Left; if (fontFamily != "默认") { tx.FontFamily = new FontFamily(fontFamily); tx2.FontFamily = new FontFamily(fontFamily); } tx2.Text = model.DanText; tx.Text = model.DanText; tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0)); tx.Foreground = model.DanColor; //弹幕大小 double size = double.Parse(model.DanSize); if (size == 25) { tx2.FontSize = fontSize; tx.FontSize = fontSize; } else { tx2.FontSize = fontSize - 2; tx.FontSize = fontSize - 2; } //grid包含弹幕文本信息 grid.Children.Add(tx2); grid.Children.Add(tx); grid.VerticalAlignment = VerticalAlignment.Top; grid.HorizontalAlignment = HorizontalAlignment.Left; TranslateTransform moveTransform = new TranslateTransform(); moveTransform.X = grid_Danmu.ActualWidth; grid.RenderTransform = moveTransform; //将弹幕加载入控件中,并且设置位置 grid_Danmu.Children.Add(grid); Grid.SetRow(grid, row); row++; if (row == maxRow) { row = 0; } tx2.Margin = new Thickness(1); if (Myself) { grid.BorderThickness = new Thickness(2); grid.BorderBrush = new SolidColorBrush(Colors.Gray); } grid.Opacity = Tran; grid.DataContext = model; //更新弹幕UI,不更新无法获得弹幕的ActualWidth grid.UpdateLayout(); //创建动画 Duration duration = new Duration(TimeSpan.FromSeconds(Speed)); DoubleAnimation myDoubleAnimationX = new DoubleAnimation(); myDoubleAnimationX.Duration = duration; //创建故事版 Storyboard justintimeStoryboard = new Storyboard(); justintimeStoryboard.Duration = duration; myDoubleAnimationX.To = -(grid.ActualWidth);//到达 justintimeStoryboard.Children.Add(myDoubleAnimationX); Storyboard.SetTarget(myDoubleAnimationX, moveTransform); //故事版加入动画 Storyboard.SetTargetProperty(myDoubleAnimationX, "X"); grid_Danmu.Resources.Remove("justintimeStoryboard"); grid_Danmu.Resources.Add("justintimeStoryboard", justintimeStoryboard); justintimeStoryboard.Begin(); //等待,暂停则暂停 await Task.Run(async () => { int i = 0; while (true) { if (!IsPlaying) { await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { justintimeStoryboard.Pause(); }); //break; } else { if (i == Speed*2) { break; } i++; await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { justintimeStoryboard.Resume(); }); } await Task.Delay(500); } }); grid_Danmu.Children.Remove(grid); } catch (Exception) { } }
/// <summary> /// 移除当前屏幕中的弹幕 /// </summary> public void RemoveDanmu(DanMuModel model) { foreach (Grid item in grid_Danmu.Children) { if (item.DataContext== model) { grid_Danmu.Children.Remove(item); } } foreach (Grid item in D_Bottom.Children) { if (item.DataContext == model) { D_Bottom.Children.Remove(item); } } foreach (Grid item in D_Top.Children) { if (item.DataContext == model) { D_Top.Children.Remove(item); } } }
private bool Handling = false;//是否正在监听 /// <summary> /// 添加顶部及底部弹幕 /// </summary> /// <param name="model">弹幕参数</param> /// <param name="istop">是否顶部</param> /// <param name="Myself">是否自己发送的</param> public async void AddTopButtomDanmu(DanMuModel model, bool istop,bool Myself) { TextBlock tx = new TextBlock(); TextBlock tx2 = new TextBlock(); Grid grid = new Grid(); if (fontFamily != "默认") { tx.FontFamily = new FontFamily(fontFamily); tx2.FontFamily = new FontFamily(fontFamily); } tx2.Text =model.DanText; tx.Text = model.DanText ; tx2.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0)); tx.Foreground = model.DanColor;//new SolidColorBrush(co[rd.Next(0, 7)]); double size = double.Parse(model.DanSize); if (size == 25) { tx2.FontSize = fontSize; tx.FontSize = fontSize; } else { tx2.FontSize = fontSize - 2; tx.FontSize = fontSize - 2; } //grid包含弹幕文本信息 grid.Children.Add(tx2); grid.Children.Add(tx); // tx.FontSize = Double.Parse(model.DanSize) - fontSize; grid.HorizontalAlignment = HorizontalAlignment.Center; grid.VerticalAlignment = VerticalAlignment.Top; tx2.Margin = new Thickness(1); if (Myself) { grid.BorderThickness = new Thickness(2); grid.BorderBrush = new SolidColorBrush(Colors.Gray); } grid.Opacity = Tran; grid.DataContext = model; grid.UpdateLayout(); if (istop) { D_Top.Children.Add(grid); await Task.Delay(5000); if (state== MediaElementState.Paused) { ClearTopButtomDanmuku(); } else { D_Top.Children.Remove(grid); } } else { D_Bottom.Children.Add(grid); await Task.Delay(5000); if (state == MediaElementState.Paused) { ClearTopButtomDanmuku(); } else { D_Bottom.Children.Remove(grid); } } }