Compare commits
No commits in common. "3057f34cdab3e43ef3a085e744d9d5e720a59289" and "c992593be144d0aa8b110be2912ae491bd6bad0f" have entirely different histories.
3057f34cda
...
c992593be1
@ -8,7 +8,6 @@ namespace Enum
|
||||
{
|
||||
NotStarted, // 游戏未开始
|
||||
Running, // 游戏进行中
|
||||
Finished, // 游戏完成
|
||||
RaiseHand
|
||||
Finished // 游戏完成
|
||||
}
|
||||
}
|
||||
|
||||
@ -162,19 +162,14 @@ namespace Wpf_AiSportsMicrospace.Views
|
||||
// 可在这里绑定抽帧事件
|
||||
_mainWin.HumanFrameUpdated += OnHumanFrameUpdated;
|
||||
}
|
||||
|
||||
private bool _isCountdownStarted = false; // 新增标记
|
||||
private void OnHumanFrameUpdated(object sender, List<Human> humans)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (humans == null || humans.Count == 0) return;
|
||||
|
||||
switch (_currentGameState)
|
||||
{
|
||||
case GameState.NotStarted: // 未开始
|
||||
if (!_isCountdownStarted) // 只有倒计时未开始才检测左手
|
||||
{
|
||||
int leftWaving = DetectLeftHandRaise(humans);
|
||||
if (leftWaving == 5)
|
||||
{
|
||||
@ -184,10 +179,8 @@ namespace Wpf_AiSportsMicrospace.Views
|
||||
// 举左手逻辑,例如结束动画或退出
|
||||
var newPage = new Home();
|
||||
_mainWin?.SwitchPageWithMaskAnimation(newPage, true);
|
||||
return; // 提前退出
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
int rightWaving = DetectRightHandRaise(humans);
|
||||
if (rightWaving >= 3)
|
||||
{
|
||||
@ -195,7 +188,6 @@ namespace Wpf_AiSportsMicrospace.Views
|
||||
{
|
||||
case (int)WavingAction.FirstHand:
|
||||
StartCountdown(3);
|
||||
_isCountdownStarted = true; // 倒计时开始,停止左手检测
|
||||
break;
|
||||
case (int)WavingAction.Raising:
|
||||
UpdateCountdown();
|
||||
@ -206,11 +198,28 @@ namespace Wpf_AiSportsMicrospace.Views
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GameState.Running: // 游戏进行中
|
||||
UpdateCircleCounts(humans);
|
||||
|
||||
// 可选:判断游戏结束条件,将状态切换到 Finished
|
||||
// if (CheckGameFinished()) _currentGameState = GameState.Finished;
|
||||
break;
|
||||
|
||||
//case GameState.Finished: // 游戏完成
|
||||
// int leftWaving = DetectLeftHandRaise(humans);
|
||||
// if (leftWaving == 5)
|
||||
// {
|
||||
// _mainWin.HumanFrameUpdated -= OnHumanFrameUpdated;
|
||||
// _mainWin.WebcamClient.StopExtract();
|
||||
|
||||
// // 举左手逻辑,例如结束动画或退出
|
||||
// var newPage = new Home();
|
||||
// _mainWin?.SwitchPageWithMaskAnimation(newPage, true);
|
||||
// }
|
||||
// break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -287,8 +296,6 @@ namespace Wpf_AiSportsMicrospace.Views
|
||||
Utils.StopBackgroundMusic();
|
||||
|
||||
_currentGameState = GameState.NotStarted;
|
||||
|
||||
_isCountdownStarted = false;
|
||||
_mainWin.HumanFrameUpdated += OnHumanFrameUpdated;
|
||||
_mainWin.WebcamClient.StartExtract();
|
||||
}
|
||||
@ -650,7 +657,7 @@ namespace Wpf_AiSportsMicrospace.Views
|
||||
* time: 动画持续时间(毫秒)
|
||||
* name: 元素名称
|
||||
*/
|
||||
public void HideElement(string name, int time)
|
||||
public void HideElement(string name , int time)
|
||||
{
|
||||
var Element = FindName(name) as Grid;
|
||||
if (Element == null) return;
|
||||
@ -665,7 +672,7 @@ namespace Wpf_AiSportsMicrospace.Views
|
||||
* time: 动画持续时间(毫秒)
|
||||
* name: 元素名称
|
||||
*/
|
||||
public void showElement(string name, int time = 600)
|
||||
public void showElement(string name, int time = 600 )
|
||||
{
|
||||
var Element = FindName(name) as FrameworkElement;
|
||||
if (Element == null) return;
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
<Grid Width="260" Height="130" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="00,830,00,0" Visibility="Visible" x:Name="countdownGrid">
|
||||
<Border Background="#9e4ff9" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0.5" CornerRadius="30" />
|
||||
<TextBlock x:Name="countdownText"
|
||||
Text="00"
|
||||
Text="100"
|
||||
FontSize="120"
|
||||
FontWeight="Bold"
|
||||
Foreground="#fff"
|
||||
|
||||
@ -162,18 +162,14 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
|
||||
// 可在这里绑定抽帧事件
|
||||
_mainWin.HumanFrameUpdated += OnHumanFrameUpdated;
|
||||
}
|
||||
private bool _isCountdownStarted = false; // 新增标记
|
||||
private void OnHumanFrameUpdated(object sender, List<Human> humans)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (humans == null || humans.Count == 0) return;
|
||||
|
||||
switch (_currentGameState)
|
||||
{
|
||||
case GameState.NotStarted: // 未开始
|
||||
if (!_isCountdownStarted) // 只有倒计时未开始才检测左手
|
||||
{
|
||||
int leftWaving = DetectLeftHandRaise(humans);
|
||||
if (leftWaving == 5)
|
||||
{
|
||||
@ -183,10 +179,9 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
|
||||
// 举左手逻辑,例如结束动画或退出
|
||||
var newPage = new Home();
|
||||
_mainWin?.SwitchPageWithMaskAnimation(newPage, true);
|
||||
return; // 提前退出
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
int rightWaving = DetectRightHandRaise(humans);
|
||||
if (rightWaving >= 3)
|
||||
{
|
||||
@ -194,7 +189,6 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
|
||||
{
|
||||
case (int)WavingAction.FirstHand:
|
||||
StartCountdown(3);
|
||||
_isCountdownStarted = true; // 倒计时开始,停止左手检测
|
||||
break;
|
||||
case (int)WavingAction.Raising:
|
||||
UpdateCountdown();
|
||||
@ -205,11 +199,28 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case GameState.Running: // 游戏进行中
|
||||
UpdateCircleCounts(humans);
|
||||
|
||||
// 可选:判断游戏结束条件,将状态切换到 Finished
|
||||
// if (CheckGameFinished()) _currentGameState = GameState.Finished;
|
||||
break;
|
||||
|
||||
//case GameState.Finished: // 游戏完成
|
||||
// int leftWaving = DetectLeftHandRaise(humans);
|
||||
// if (leftWaving == 5)
|
||||
// {
|
||||
// _mainWin.HumanFrameUpdated -= OnHumanFrameUpdated;
|
||||
// _mainWin.WebcamClient.StopExtract();
|
||||
|
||||
// // 举左手逻辑,例如结束动画或退出
|
||||
// var newPage = new Home();
|
||||
// _mainWin?.SwitchPageWithMaskAnimation(newPage, true);
|
||||
// }
|
||||
// break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -218,14 +229,13 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private int _currentCountdown = 3;
|
||||
private DateTime _lastUpdateTime = DateTime.Now;
|
||||
private void StartCountdown(int start = 4)
|
||||
{
|
||||
_currentCountdown = start;
|
||||
//countdownText.Text = _currentCountdown.ToString();
|
||||
//countdownGrid.Visibility = Visibility.Visible;
|
||||
countdownText.Text = _currentCountdown.ToString();
|
||||
countdownGrid.Visibility = Visibility.Visible;
|
||||
_lastUpdateTime = DateTime.Now;
|
||||
_mainWin.ShowCountDownAnimation();
|
||||
Utils.PlayBackgroundMusic("countdown_3.mp3", false);
|
||||
@ -254,7 +264,7 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
|
||||
countdownText.Text = "GO!";
|
||||
countdownGrid.Visibility = Visibility.Hidden;
|
||||
// 启动60秒倒计时(独立任务)
|
||||
StartGameCountdown(108);
|
||||
StartGameCountdown(105);
|
||||
ShowMusicAnimation();
|
||||
}
|
||||
|
||||
@ -291,7 +301,6 @@ namespace Wpf_AiSportsMicrospace.Views.JumpRope
|
||||
|
||||
// 更新游戏状态
|
||||
_currentGameState = GameState.NotStarted;
|
||||
_isCountdownStarted = false;
|
||||
|
||||
// 恢复视频流
|
||||
Application.Current.Dispatcher.Invoke(() =>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user