繁体   English   中英

C#中的Windows Store App的2D球运动

[英]2D Ball Movement for Windows Store App in C#

首先,对于C#来说是全新的,我必须为研究项目开发Windows Store App。 我决定开发一个应用程序,在该应用程序中您必须将球保持在空中(在球场底部有一个球拍,几乎与经典的乒乓球游戏相同),这真是愚蠢的,因为我真的不知道该怎么做。去做这个。

目前,我的代码如下所示:

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:我阅读了很多“乒乓球”和“球物理”教程,但它们并没有真正帮助我。

一种简单的方法是在一个单独的变量中跟踪球的速度,并使用它来更新其平移。

即类似的东西:(示例是不完整的,但我希望你能理解它的要旨)

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!");
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM