private void DanmuCanvas_Update(Microsoft.Graphics.Canvas.UI.Xaml.ICanvasAnimatedControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasAnimatedUpdateEventArgs args) { double width = sender.Size.Width; for (int i = 0; i < onDrawList.Count; i++) { Vector2 v2; dmu = onDrawList[i]; if (dmu.location == DanmuLocation.normal) { if (onDrawList[i].position.X < -(onDrawList[i].Text.Length * 23)) { onDrawList.RemoveAt(i); i--; continue; } if (dmu.isLocationKey && dmu.position.X < width - dmu.Text.Length * 22) { onDrawNormal[dmu.onDrawlocation] = false; onDrawList[i].isLocationKey = false; } v2 = new Vector2(onDrawList[i].position.X - ss * 3, onDrawList[i].position.Y); // clds.DrawText(onDrawList[i].Text, v2.X + 2, v2.Y + 1, Colors.Black); //clds.DrawText(onDrawList[i].Text, v2, onDrawList[i].color); onDrawList[i].position = v2; } else if (dmu.location == DanmuLocation.top) { if (dmu.isLocationKey && dmu.updateTime >= 200) { if (onDrawTop.Count <= 0) { return; } dmu.isLocationKey = false; onDrawTop[dmu.onDrawlocation] = false; onDrawList.RemoveAt(i); i--; continue; } else { //clds.DrawText(onDrawList[i].Text, onDrawList[i].position.X + 2, onDrawList[i].position.Y + 1, Colors.Black); //clds.DrawText(onDrawList[i].Text, onDrawList[i].position, onDrawList[i].color); onDrawList[i].updateTime++; } } else if (dmu.location == DanmuLocation.bottom) { if (dmu.isLocationKey && dmu.updateTime >= 200) { if (onDrawBottom.Count <= 0) { return; } dmu.isLocationKey = false; onDrawBottom[dmu.onDrawlocation] = false; onDrawList.RemoveAt(i); i--; continue; } else { //clds.DrawText(onDrawList[i].Text, onDrawList[i].position.X + 2, onDrawList[i].position.Y + 1, Colors.Black); //clds.DrawText(onDrawList[i].Text, onDrawList[i].position, onDrawList[i].color); onDrawList[i].updateTime++; } } } }
private void DanmuLifeCycle() { var pTime = Player.Position.TotalMilliseconds; if (copyDanmuList == null || Player.CurrentState == MediaElementState.Stopped || Player.CurrentState == MediaElementState.Paused) { return; } for (int i = 0; i < copyDanmuList.Count; i++) { if (copyDanmuList[i].RealTime < pTime - 75) { // copyDanmuList.RemoveAt(i); // i--; continue; } else if (copyDanmuList[i].RealTime > pTime - 75 && copyDanmuList[i].RealTime < pTime) { Danmu d = new Danmu(); d.color = copyDanmuList[i].RealColor.Color; d.Text = copyDanmuList[i].Msg; d.updateTime = 0; d.location = copyDanmuList[i].RealLocation; if (d.location == DanmuLocation.normal) { var loc = FindOnDrawLocationPosition(d.location); if (loc != -1) { d.position = new Vector2((float)DanmuCanvas.ActualWidth, loc * 22); d.onDrawlocation = loc; } else { d.position = new Vector2((float)DanmuCanvas.ActualWidth, onDrawNormal.Count * 22); d.onDrawlocation = onDrawNormal.Count; if (d.onDrawlocation * 22 > DanmuCanvas.ActualWidth) { return; } onDrawNormal.Add(true); } } else if (d.location == DanmuLocation.bottom) { var loc = FindOnDrawLocationPosition(d.location); if (loc != -1) { d.position = new Vector2(((float)DanmuCanvas.ActualWidth - d.Text.Length * 20) / 2, (float)DanmuCanvas.ActualHeight - (loc + 1) * 22); d.onDrawlocation = loc; } else { d.position = new Vector2(((float)DanmuCanvas.ActualWidth - d.Text.Length * 20) / 2, (float)DanmuCanvas.ActualHeight - (onDrawBottom.Count + 1) * 22); d.onDrawlocation = onDrawBottom.Count; if (d.onDrawlocation * 22 > DanmuCanvas.ActualWidth) { return; } onDrawBottom.Add(true); } } else if (d.location == DanmuLocation.top) { var loc = FindOnDrawLocationPosition(d.location); if (loc != -1) { d.position = new Vector2(((float)DanmuCanvas.ActualWidth - d.Text.Length * 20) / 2, loc * 22); d.onDrawlocation = loc; } else { d.position = new Vector2(((float)DanmuCanvas.ActualWidth - d.Text.Length * 20) / 2, onDrawTop.Count * 22); d.onDrawlocation = onDrawTop.Count; if (d.onDrawlocation * 22 > DanmuCanvas.ActualWidth) { return; } onDrawTop.Add(true); } } d.isLocationKey = true; onDrawList.Add(d); } else if (copyDanmuList[i].RealTime > pTime) { break; } } }