c# XNA球拍球游戏

本文关键字:游戏 XNA | 更新日期: 2023-09-27 18:10:55

嘿,伙计们,我正在制作一个球拍球/乒乓球游戏,我想弄清楚如何使球"弹"离球拍随机像其他乒乓球游戏。

最简单的方法是什么?

目前我的碰撞代码只是让它在另一个方向反弹(向上)

public void checkCollision()
{
    Rectangle paddlerect = new Rectangle((int)Paddle.pos.X, (int)Paddle.pos.Y, Paddle.paddle.Width, Paddle.paddle.Height);
    Rectangle ballrect = new Rectangle((int)pos.X, (int)pos.Y, ball.Width, ball.Height);
    if (ballrect.Intersects(paddlerect))
    {
        yspeed = 3;
    }
}

你能告诉我如何使它随机地向两边反弹吗?就像在对角线上。

c# XNA球拍球游戏

我假设这个球至少有4个变量:

  • XSpeed
  • YSpeed

角度+大小形成一个向量,我称之为v1。为了使它在一个"随机"的方向上反弹(实际上,这从来都不是随机的),你需要使用鼻窦和鼻窦函数。我不打算回去解释三角形中的东西是如何工作的,但是你可以用它们来计算它的每一个长度和角度。所以你有:

XSpeed = v1.Magnitude * cos(v1.Angle);
YSpeed = v1.Magnitude * sin(v1.Angle);

如果你需要了解更多,请前往Game Programming Wiki。说真的,它真的很棒。

我假设你有一个名为xspeed的变量,它控制球向左或向右移动的速度。

乒乓类游戏主要做两件事。

  1. 只要反转y速度,就像你正在做的那样。
  2. 反转y速度,但也改变x速度取决于球在"棒"上击中的位置。例如,在最右边击球会使球向右反弹。

对于选项2,你可以A)根据球击中中间的距离直接设置xspeed,或者B)根据球离中间的距离对xspeed进行加减。

var relativemidpoint = (ball.left + ball.width/2) -
                       (paddle.left + paddle.width/2);
// Option A
xspeed = relativemidpoint / 10; // or some other constant
// Option B
xspeed += relativemidpoint / 10; // or some other constant

你可能还想限制xspeed在一个范围内,这样它就不会变得太快。

如果你想让整体速度保持不变,那么你必须根据xspeed的值来缩放yspeed