【发布时间】:2015-05-20 13:39:30
【问题描述】:
首先,我对 C# 完全陌生,我必须在 Windows Store 应用程序上工作以进行学习项目。 我决定开发一个应用程序,您必须在其中将球保持在空中(在场地底部有一个桨,几乎与经典的乒乓球比赛相同),这真的很愚蠢,因为我真的不知道如何这样做。
我的代码现在是这样的:
void Timer_Tick(object sender, object e)
{
Rect rectBall = new Rect(BallTransform.TranslateX, BallTransform.TranslateY, RectBall.ActualWidth, RectBall.ActualHeight);
Rect rectPaddle = new Rect(PaddleTransform.TranslateX, PaddleTransform.TranslateY, RectPaddle.ActualWidth, RectPaddle.ActualHeight);
rectPaddle.Intersect(rectBall);
int counter = 0;
Score.Text = ("Score: " + counter);
if (rectPaddle.IsEmpty == true)
{
BallTransform.TranslateY += 20;
}
if (BallTransform.TranslateY - 50 > PaddleTransform.TranslateY)
{
BallTransform.TranslateY -= 20;
Result.Text = ("Game Over!");
}
//if (rectPaddle.IsEmpty == false)
//{
// counter += 1;
// BallTransform.TranslateY -= 20;
// Score.Text = ("Score: " + counter);
//}
}
void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
switch (args.VirtualKey)
{
case Windows.System.VirtualKey.A:
PaddleTransform.TranslateX -= 40;
break;
case Windows.System.VirtualKey.D:
PaddleTransform.TranslateX += 40;
break;
case Windows.System.VirtualKey.Left:
PaddleTransform.TranslateX -= 40;
break;
case Windows.System.VirtualKey.Right:
PaddleTransform.TranslateX += 40;
break;
default:
break;
}
}
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
PaddleTransform.TranslateY = Grid.ActualHeight - RectPaddle.ActualHeight - 20;
PaddleTransform.TranslateX = (Grid.ActualWidth / 2) - RectPaddle.ActualWidth;
BallTransform.TranslateX = (Grid.ActualWidth / 2) - RectBall.ActualWidth;
DispatcherTimer Timer = new DispatcherTimer();
Timer.Interval = new TimeSpan(100);
Timer.Tick += Timer_Tick;
Timer.Start();
}
}
}
我知道这并不算多,除了让球掉下来之外,它并没有真正做任何事情,如果它碰到桨,它就会停留在原来的位置,如果它错过了桨,它就是“游戏结束”。
我最大的问题是,要弄清楚如何让球落在桨上后再次跳起来,并在这样做后给它不同的弹跳方向。我也不知道我应该如何处理球的速度。
如果有人能解释我应该怎么做,我会非常高兴。
提前致谢!
PS:我阅读了很多“Pong”和“Ball physic”教程,但它们并没有真正帮助到我。
【问题讨论】:
-
球拍在屏幕底部的撞击只是球速度的垂直分量的反转。例如如果球以 X=10 和 Y=10 的速度运动(代表对角线向下运动),与球拍碰撞会将速度变为 X=10,Y=-10(对角线向上运动)。
标签: c# wpf windows visual-studio-2013 physics