This commit is contained in:
ltx 2025-10-20 14:33:13 +08:00
commit 8c6c30db63
6 changed files with 81 additions and 55 deletions

View File

@ -56,7 +56,7 @@ namespace Wpf_AiSportsMicrospace.Common
{ {
try try
{ {
_webcamClient = WebcamClient.CreateRTSP("172.17.30.64", "admin", "yd708090", 554u); _webcamClient = WebcamClient.CreateRTSP("172.17.30.65", "admin", "yd708090", 554u);
} }
catch (Exception) catch (Exception)
{ {

View File

@ -19,7 +19,7 @@
DisplayMemberPath="Name" DisplayMemberPath="Name"
SelectedValuePath="Key" SelectedValuePath="Key"
SelectionChanged="sportList_SelectionChanged" d:IsHidden="True"/> SelectionChanged="sportList_SelectionChanged" d:IsHidden="True"/>
<TextBox x:Name="host" Margin="0,10,0,0" Text="192.168.3.64"/> <TextBox x:Name="host" Margin="0,10,0,0" Text="172.17.30.65"/>
<TextBox x:Name="userName" Margin="0,10,0,0" Text="admin"/> <TextBox x:Name="userName" Margin="0,10,0,0" Text="admin"/>
<TextBox x:Name="password" Margin="0,10,0,0" Text="yd708090"/> <TextBox x:Name="password" Margin="0,10,0,0" Text="yd708090"/>
<TextBox x:Name="port" Margin="0,10,0,0" Text="554"/> <TextBox x:Name="port" Margin="0,10,0,0" Text="554"/>

View File

@ -19,11 +19,11 @@
/> />
<Grid Height="1080" Width="1920" x:Name="userBox"/> <Grid Height="1080" Width="1920" x:Name="userBox"/>
<Grid Width="220" Height="130" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="00,40,60,0" Visibility="Hidden" x:Name="countdownGrid"> <Grid Width="180" Height="90" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="00,20,40,0" Visibility="Hidden" x:Name="countdownGrid">
<Border Background="#005fff" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CornerRadius="30" /> <Border Background="#005fff" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CornerRadius="30" />
<TextBlock x:Name="countdownText" <TextBlock x:Name="countdownText"
Text="60" Text="60"
FontSize="120" FontSize="80"
FontWeight="Bold" FontWeight="Bold"
Foreground="#fff" Foreground="#fff"
FontStyle="Italic" FontStyle="Italic"

View File

@ -170,6 +170,17 @@ namespace Wpf_AiSportsMicrospace.Views
switch (_currentGameState) switch (_currentGameState)
{ {
case GameState.NotStarted: // 未开始 case GameState.NotStarted: // 未开始
int leftWaving = DetectLeftHandRaise(humans);
if (leftWaving == 5)
{
_mainWin.HumanFrameUpdated -= OnHumanFrameUpdated;
_mainWin.WebcamClient.StopExtract();
// 举左手逻辑,例如结束动画或退出
var newPage = new Home();
_mainWin?.SwitchPageWithMaskAnimation(newPage, true);
}
else {
int rightWaving = DetectRightHandRaise(humans); int rightWaving = DetectRightHandRaise(humans);
if (rightWaving >= 3) if (rightWaving >= 3)
{ {
@ -187,6 +198,7 @@ namespace Wpf_AiSportsMicrospace.Views
break; break;
} }
} }
}
break; break;
case GameState.Running: // 游戏进行中 case GameState.Running: // 游戏进行中
@ -196,18 +208,18 @@ namespace Wpf_AiSportsMicrospace.Views
// if (CheckGameFinished()) _currentGameState = GameState.Finished; // if (CheckGameFinished()) _currentGameState = GameState.Finished;
break; break;
case GameState.Finished: // 游戏完成 //case GameState.Finished: // 游戏完成
int leftWaving = DetectLeftHandRaise(humans); // int leftWaving = DetectLeftHandRaise(humans);
if (leftWaving == 5) // if (leftWaving == 5)
{ // {
_mainWin.HumanFrameUpdated -= OnHumanFrameUpdated; // _mainWin.HumanFrameUpdated -= OnHumanFrameUpdated;
_mainWin.WebcamClient.StopExtract(); // _mainWin.WebcamClient.StopExtract();
// 举左手逻辑,例如结束动画或退出 // // 举左手逻辑,例如结束动画或退出
var newPage = new Home(); // var newPage = new Home();
_mainWin?.SwitchPageWithMaskAnimation(newPage, true); // _mainWin?.SwitchPageWithMaskAnimation(newPage, true);
} // }
break; // break;
} }
} }
catch (Exception ex) catch (Exception ex)
@ -283,7 +295,7 @@ namespace Wpf_AiSportsMicrospace.Views
ShowRankingBoard(RankingItemList); ShowRankingBoard(RankingItemList);
Utils.StopBackgroundMusic(); Utils.StopBackgroundMusic();
_currentGameState = GameState.Finished; _currentGameState = GameState.NotStarted;
_mainWin.HumanFrameUpdated += OnHumanFrameUpdated; _mainWin.HumanFrameUpdated += OnHumanFrameUpdated;
_mainWin.WebcamClient.StartExtract(); _mainWin.WebcamClient.StartExtract();
} }

View File

@ -43,7 +43,7 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
// 容忍时间(节拍误差) // 容忍时间(节拍误差)
public double _beatTolerance = 0.15; // ±150ms public double _beatTolerance = 0.2; // ±150ms
private int _totalDots = 0; private int _totalDots = 0;
// 滚动显示的节拍点集合 // 滚动显示的节拍点集合
public ObservableCollection<BeatItem> BeatDisplayLeft { get; set; } = new(); public ObservableCollection<BeatItem> BeatDisplayLeft { get; set; } = new();
@ -171,6 +171,18 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
switch (_currentGameState) switch (_currentGameState)
{ {
case GameState.NotStarted: // 未开始 case GameState.NotStarted: // 未开始
int leftWaving = DetectLeftHandRaise(humans);
if (leftWaving == 5)
{
_mainWin.HumanFrameUpdated -= OnHumanFrameUpdated;
_mainWin.WebcamClient.StopExtract();
// 举左手逻辑,例如结束动画或退出
var newPage = new Home();
_mainWin?.SwitchPageWithMaskAnimation(newPage, true);
}
else
{
int rightWaving = DetectRightHandRaise(humans); int rightWaving = DetectRightHandRaise(humans);
if (rightWaving >= 3) if (rightWaving >= 3)
{ {
@ -188,6 +200,7 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
break; break;
} }
} }
}
break; break;
case GameState.Running: // 游戏进行中 case GameState.Running: // 游戏进行中
@ -197,18 +210,18 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
// if (CheckGameFinished()) _currentGameState = GameState.Finished; // if (CheckGameFinished()) _currentGameState = GameState.Finished;
break; break;
case GameState.Finished: // 游戏完成 //case GameState.Finished: // 游戏完成
int leftWaving = DetectLeftHandRaise(humans); // int leftWaving = DetectLeftHandRaise(humans);
if (leftWaving == 5) // if (leftWaving == 5)
{ // {
_mainWin.HumanFrameUpdated -= OnHumanFrameUpdated; // _mainWin.HumanFrameUpdated -= OnHumanFrameUpdated;
_mainWin.WebcamClient.StopExtract(); // _mainWin.WebcamClient.StopExtract();
// 举左手逻辑,例如结束动画或退出 // // 举左手逻辑,例如结束动画或退出
var newPage = new Home(); // var newPage = new Home();
_mainWin?.SwitchPageWithMaskAnimation(newPage, true); // _mainWin?.SwitchPageWithMaskAnimation(newPage, true);
} // }
break; // break;
} }
} }
catch (Exception ex) catch (Exception ex)
@ -288,7 +301,7 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
// 更新游戏状态 // 更新游戏状态
_currentGameState = GameState.Finished; _currentGameState = GameState.NotStarted;
// 恢复视频流 // 恢复视频流
Application.Current.Dispatcher.Invoke(() => Application.Current.Dispatcher.Invoke(() =>

View File

@ -5,6 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Wpf_AiSportsMicrospace.Views" xmlns:local="clr-namespace:Wpf_AiSportsMicrospace.Views"
xmlns:gif="http://wpfanimatedgif.codeplex.com" xmlns:gif="http://wpfanimatedgif.codeplex.com"
WindowStyle="None"
mc:Ignorable="d" WindowState="Maximized"> mc:Ignorable="d" WindowState="Maximized">
<Grid> <Grid>
<!-- 过渡容器 --> <!-- 过渡容器 -->