【问题标题】:C# XNA Paddle ball gameC# XNA 桨球游戏
【发布时间】:2011-10-08 06:14:58
【问题描述】:

嘿,我正在制作一个桨球/乒乓球游戏,我正在尝试弄清楚如何让球像其他乒乓球游戏一样从桨叶随机“弹回”。

最简单的方法是什么?

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

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

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

【问题讨论】:

  • 不知道其余的代码,这只是一个猜测,但如果你有一个 yspeed 变量来确定你的垂直速度和方向。您没有可以以相同方式更改的 xspeed 吗?
  • 我从未见过乒乓球比赛中“球随机“弹跳”,通常在乒乓球比赛中,球在 Y 轴上的方向只是在击球时恢复。 if (ballrect.Intersects(paddlerect)) { yspeed = -yspeed ; }

标签: c# xna


【解决方案1】:

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

  • 角度
  • 幅度
  • XSpeed
  • Y 速度

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

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

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

【讨论】:

    【解决方案2】:

    我假设您有一个名为 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多