C#XNA桨球比赛

时间:2011-10-08 06:14:58

标签: c# xna

嘿家伙我正在做一个划桨球/乒乓球比赛,我正在试图弄清楚如何让球像其他乒乓球比赛一样随机地从球拍中“弹跳”。

最简单的方法是什么?

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

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;
    }
}

你能告诉我如何让它随机弹跳到两侧吗?就像在diaganol上一样。

2 个答案:

答案 0 :(得分:1)

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

  • 角度
  • 幅度
  • XSpeed
  • YSpeed

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

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

如果您需要了解更多信息,请转到Game Programming Wiki。说真的,这真的很棒。

答案 1 :(得分:0)

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

乒乓球比赛有两件主要的事情。

  1. 只需反转y速度,就像你正在做的那样(实际上)。
  2. 反转y速度,但也会改变x速度,具体取决于击球的“击球”位置。即击中最右边的球会让它反弹。
  3. 对于选项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限制在一个范围内,这样它就不会太快地横向移动。

    如果您希望整体速度保持不变,则必须根据yspeed的值缩放xspeed