diff --git a/Wpf_AiSportsMicrospace/MyUserControl/PopSilder.xaml b/Wpf_AiSportsMicrospace/MyUserControl/PopSilder.xaml index 638efd1..899be53 100644 --- a/Wpf_AiSportsMicrospace/MyUserControl/PopSilder.xaml +++ b/Wpf_AiSportsMicrospace/MyUserControl/PopSilder.xaml @@ -12,20 +12,19 @@ - - + - - + + + BorderThickness="3" + CornerRadius="5" + Padding="0" + Margin="10"> diff --git a/Wpf_AiSportsMicrospace/MyUserControl/PopSilder.xaml.cs b/Wpf_AiSportsMicrospace/MyUserControl/PopSilder.xaml.cs index edaa56b..86e009f 100644 --- a/Wpf_AiSportsMicrospace/MyUserControl/PopSilder.xaml.cs +++ b/Wpf_AiSportsMicrospace/MyUserControl/PopSilder.xaml.cs @@ -171,7 +171,8 @@ namespace Wpf_AiSportsMicrospace.MyUserControl var hideTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(200) }; hideTimer.Tick += (s, e) => { - //head_m.Visibility = Visibility.Hidden; + head_m.Visibility = Visibility.Hidden; + miss.Visibility = Visibility.Hidden; //_isMiss = true; hideTimer.Stop(); }; diff --git a/Wpf_AiSportsMicrospace/MyUserControl/WxProgressBar.xaml b/Wpf_AiSportsMicrospace/MyUserControl/WxProgressBar.xaml index 2c0a062..b8f5718 100644 --- a/Wpf_AiSportsMicrospace/MyUserControl/WxProgressBar.xaml +++ b/Wpf_AiSportsMicrospace/MyUserControl/WxProgressBar.xaml @@ -4,10 +4,10 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" x:Name="root" - Width="1206"> + > - + diff --git a/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/jump_u.gif b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/jump_u.gif new file mode 100644 index 0000000..490e8a4 Binary files /dev/null and b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/jump_u.gif differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/jump_u.png b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/jump_u.png new file mode 100644 index 0000000..2457f51 Binary files /dev/null and b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/jump_u.png differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/out_u.png b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/out_u.png new file mode 100644 index 0000000..2db0a32 Binary files /dev/null and b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/out_u.png differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/play_bg.png b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/play_bg.png index a464956..1d43fec 100644 Binary files a/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/play_bg.png and b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/play_bg.png differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/title.png b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/title.png index 0261698..8406c46 100644 Binary files a/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/title.png and b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/title.png differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/vs.png b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/vs.png new file mode 100644 index 0000000..f359b5f Binary files /dev/null and b/Wpf_AiSportsMicrospace/Resources/Img/play_img/music_rope/vs.png differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/out_user.png b/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/out_user.png index c5c66a9..9bd983b 100644 Binary files a/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/out_user.png and b/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/out_user.png differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/out_user1.png b/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/out_user1.png new file mode 100644 index 0000000..c5c66a9 Binary files /dev/null and b/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/out_user1.png differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/pre_user.png b/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/pre_user.png index 7369350..3d3c4c6 100644 Binary files a/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/pre_user.png and b/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/pre_user.png differ diff --git a/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/pre_user1.png b/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/pre_user1.png new file mode 100644 index 0000000..7369350 Binary files /dev/null and b/Wpf_AiSportsMicrospace/Resources/Img/test_img/one_rope/pre_user1.png differ diff --git a/Wpf_AiSportsMicrospace/Views/JumpRope/MusicJumpRope.xaml b/Wpf_AiSportsMicrospace/Views/JumpRope/MusicJumpRope.xaml index f2f7598..3d93c14 100644 --- a/Wpf_AiSportsMicrospace/Views/JumpRope/MusicJumpRope.xaml +++ b/Wpf_AiSportsMicrospace/Views/JumpRope/MusicJumpRope.xaml @@ -5,6 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Wpf_AiSportsMicrospace.MyUserControl" mc:Ignorable="d" + xmlns:gif="http://wpfanimatedgif.codeplex.com" Height="1080" Width="1920" Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded"> @@ -15,15 +16,16 @@ HorizontalAlignment="Center" VerticalAlignment="Top" Width="905" - Margin="0,70,0,0" + Margin="0,50,0,0" MouseDown="Image_MouseDown" /> - - + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Wpf_AiSportsMicrospace/Views/JumpRope/MusicJumpRope.xaml.cs b/Wpf_AiSportsMicrospace/Views/JumpRope/MusicJumpRope.xaml.cs index d054b6c..693feab 100644 --- a/Wpf_AiSportsMicrospace/Views/JumpRope/MusicJumpRope.xaml.cs +++ b/Wpf_AiSportsMicrospace/Views/JumpRope/MusicJumpRope.xaml.cs @@ -62,7 +62,7 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope DrawCirclesWithText(); // 播放音乐 PlayMusic("raisehand.mp3"); - PkBar.LeftProgress = 0.5; + PkBar.LeftProgress = 1; popSilder1.MusicBeats = _musicJumpRopeContext.MusicBeats["1"]; popSilder2.MusicBeats = _musicJumpRopeContext.MusicBeats["1"]; @@ -219,12 +219,13 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope private int _currentCountdown = 3; private DateTime _lastUpdateTime = DateTime.Now; - private void StartCountdown(int start = 3) + private void StartCountdown(int start = 4) { _currentCountdown = start; countdownText.Text = _currentCountdown.ToString(); countdownGrid.Visibility = Visibility.Visible; _lastUpdateTime = DateTime.Now; + _mainWin.ShowCountDownAnimation(); Utils.PlayBackgroundMusic("countdown_3.mp3", false); } @@ -461,22 +462,24 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope double y = pos.YNorm * imgHeight; // 绘制发光圆 - var userItem = AddUserItem(x, y, i); + //var userItem = AddUserItem(x, y, i); // 绑定运动对象 var sport = SportBase.Create("rope-skipping"); int indexCopy = i; - var currentItem = userItem; + //var currentItem = userItem; // 订阅事件 sport.OnTicked += (count, times) => { // 更新UI - userItem.NumberText = count.ToString(); + //userItem.NumberText = count.ToString(); // 更新数字源 _musicJumpRopeContext.UserNumberList[indexCopy] = count.ToString(); - if (userItem.ImageState != "2") - userItem.ImageState = "2"; + //if (userItem.ImageState != "2") + // userItem.ImageState = "2"; + ChangeImgState(indexCopy, "2"); //改变当前图的状态 + var currentTime = Utils.GetMusicCurrentTime(); int currentSecond = (int)Math.Floor(currentTime); @@ -488,32 +491,22 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope { _musicJumpRopeContext.UserBeatSyncList[indexCopy]++; _musicBeatTextBlock[indexCopy].Text = $"卡点 x{_musicJumpRopeContext.UserBeatSyncList[indexCopy]}"; - if (indexCopy == 0) - { - popSilder1.IsMiss = false; - } - else - { - popSilder2.IsMiss = false; - } double left = _musicJumpRopeContext.UserBeatSyncList[0]; double right = _musicJumpRopeContext.UserBeatSyncList[1]; double total = left + right; PkBar.LeftProgress = total == 0 ? 0 : Math.Round(left / total, 2); - - //if (indexCopy == 0) - // LeftBeats.SetSelected(currentSecond, true); - //else - // RightBeats.SetSelected(currentSecond, true); - - //Application.Current.Dispatcher.BeginInvoke(() => - //{ - // if (indexCopy == 0) - // LeftBeats.SetSelected(currentSecond, true); - // else - // RightBeats.SetSelected(currentSecond, true); - //}); + if (indexCopy == 0) + { + popSilder1.IsMiss = false; + UpdateScore(left, score1); + } + else + { + UpdateScore(right,score2); + popSilder2.IsMiss = false; + } + } }; @@ -522,6 +515,34 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope } } + private void UpdateScore(double to , TextBlock score) + { + DoubleAnimation animation = new DoubleAnimation + { + From = double.Parse(score1.Text), + To = to, + Duration = TimeSpan.FromSeconds(0.2), + EasingFunction = new QuadraticEase { EasingMode = EasingMode.EaseOut }, + FillBehavior = FillBehavior.HoldEnd + }; + score.BeginAnimation(TextBlock.TextProperty, animation); + } + + private void ChangeImgState(int index , string state) + { + if(index== 0) + { + left1.Visibility = state == "1" ? Visibility.Visible : Visibility.Hidden; + left2.Visibility = state == "2" ? Visibility.Visible : Visibility.Hidden; + left3.Visibility = state == "3" ? Visibility.Visible : Visibility.Hidden; + }else if (index == 1) + { + right1.Visibility = state == "1" ? Visibility.Visible : Visibility.Hidden; + right2.Visibility = state == "1" ? Visibility.Visible : Visibility.Hidden; + right3.Visibility = state == "1" ? Visibility.Visible : Visibility.Hidden; + } + } + private void UpdateCircleCounts(List humans) { double radiusNormX = 0.07; @@ -564,7 +585,9 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope bool hasHuman = humanInCircle != null; lock (_updateLock) { - _musicJumpRopeContext.UserList[i].ImageState = GetJumpState(i, hasHuman); + //_musicJumpRopeContext.UserList[i].ImageState = GetJumpState(i, hasHuman); + var state = GetJumpState(i, hasHuman); + ChangeImgState(i, state); } // 推送计数 @@ -608,46 +631,6 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope return lastState; } - private SportUserItem AddUserItem(double centerX, double centerY, int index) - { - var userItem = new SportUserItem(); - userItem.Width = 270; - userItem.Height = 560; - userItem.DisplayText = _musicJumpRopeContext.UseNameList[index]; - userItem.VerticalAlignment = VerticalAlignment.Top; - userItem.HorizontalAlignment = HorizontalAlignment.Left; - userItem.ImageState = "1"; - userItem.Margin = new Thickness(centerX + 120, centerY - 700, 0, 0); - - // ----------- 创建上方 TextBlock ------------ - var textBlock = new TextBlock - { - Text = "0", // 卡点个数 - FontSize = 50, - FontWeight = FontWeights.Bold, - Foreground = Brushes.Red, - HorizontalAlignment = HorizontalAlignment.Left, - VerticalAlignment = VerticalAlignment.Top, - TextAlignment = TextAlignment.Center, - Width = userItem.Width // 文本宽度和 userItem 一样 - }; - - // 设置 TextBlock 的 Margin,使其在 userItem 上方居中 - double textLeft = userItem.Margin.Left; - double textTop = userItem.Margin.Top - 50; // 50 可以根据需要调整高度 - textBlock.Margin = new Thickness(textLeft, textTop, 0, 0); - - // 添加控件 - userBox.Children.Add(userItem); - userBox.Children.Add(textBlock); - - _musicJumpRopeContext.UserList.Add(userItem); - _musicJumpRopeContext.UserNumberList.Add("0"); - _musicJumpRopeContext.UserBeatSyncList.Add(0); - _musicBeatTextBlock.Add(textBlock); - - return userItem; - } private void Image_MouseDown(object sender, MouseButtonEventArgs e) { diff --git a/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj b/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj index 720ca25..f39f301 100644 --- a/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj +++ b/Wpf_AiSportsMicrospace/Wpf_AiSportsMicrospace.csproj @@ -47,10 +47,14 @@ + + + + @@ -65,8 +69,10 @@ + + @@ -99,6 +105,12 @@ Always + + Always + + + Always + Always @@ -245,6 +257,9 @@ Always + + Always + Always @@ -254,6 +269,9 @@ Always + + Always + Always @@ -296,12 +314,18 @@ Always + + Always + Always Always + + Always + Always