Exemple #1
0
        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++;
                    }
                }
            }
        }
Exemple #2
0
        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;
                }
            }
        }