C# C中Windows应用商店应用程序的2D球移动#
首先,我对C#一无所知,我必须为一个学习项目开发一个Windows应用商店应用程序。 我决定开发一个应用程序,在那里你必须把球保持在空中(在球场底部有一个桨,几乎和经典的乒乓球游戏一样),这真是太愚蠢了,因为我根本不知道怎么做 目前我的代码如下所示:C# C中Windows应用商店应用程序的2D球移动#,c#,wpf,windows,visual-studio-2013,physics,C#,Wpf,Windows,Visual Studio 2013,Physics,首先,我对C#一无所知,我必须为一个学习项目开发一个Windows应用商店应用程序。 我决定开发一个应用程序,在那里你必须把球保持在空中(在球场底部有一个桨,几乎和经典的乒乓球游戏一样),这真是太愚蠢了,因为我根本不知道怎么做 目前我的代码如下所示: void Timer_Tick(object sender, object e) { Rect rectBall = new Rect(BallTransform.TranslateX, BallTransform.Tr
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:我读了很多“乒乓球”和“球物理”教程,但它们并没有真正帮助我。一个简单的方法是在一个单独的变量中跟踪球的速度,并使用它来更新其转换 (例子不完整,但我希望你能理解要点)
与屏幕底部的挡板的碰撞只是球速度的垂直分量的反转。e、 g.如果球以X=10和Y=10的速度运动(代表对角线向下运动),与桨叶的碰撞会将速度改变为X=10,Y=-10(对角线向上运动)。请注意,这绝不是一个完整的例子,也不一定是实现这一点的最佳方式,但我想让OP来解决这个问题。理解是成功的一半。
float BallXVel = 10;
float BallYVel = 20;
void Timer_Tick(object sender, object e)
{
//always move the ball.
BallTransform.TranslateX += BallXVel;
BallTransform.TranslateY += BallYVel;
//bounce the ball up if it hits the paddle and is not already moving up
if (!rectPaddle.IsEmpty && BallYVel > 0)
{
BallYVel = 0-BallYVel;
}
if (BallTransform.TranslateY - 50 > PaddleTransform.TranslateY)
{
BallTransform.TranslateY -= 20;
Result.Text = ("Game Over!");
}
}