【问题标题】:2D Gaming - How to reflect a ball off the bat?2D 游戏 - 如何反射击球时的球?
【发布时间】:2013-12-02 13:32:34
【问题描述】:

我对 XNA 和游戏开发还很陌生,并且卡在球反射上。我的球一旦击中球棒就会反射,但只会在一个角度反射,无论球棒在哪个角度。

代码如下:

if (BallRect.Intersects(BatRect))
    {
        Vector2 NormBallVelocity = Ball.velocity;
        NormBallVelocity.Normalize();
        NormBallVelocity = Vector2.Reflect(Ball.velocity, NormBallVelocity);
        Ball.velocity = NormBallVelocity;
    }

球正在缩回。 如何让球看起来像是从球棒上反射出来的?

我看过其他帖子,但它们是在 3D 前端我太新了,无法将其翻译成 2D 术语...

【问题讨论】:

    标签: reflection vector xna bounce


    【解决方案1】:

    我很确定您需要反射球棒的法线而不是球的速度,这是正常的。

    【讨论】:

      【解决方案2】:

      参考MSDN Reflect Method,看起来你想从蝙蝠的速度和法线来反映。

      【讨论】:

      • 我之前已经试过了。我刚刚在上面的代码中用球棒替换了球,我不知道为什么,但是无论球棒在哪个角度,它在第二象限的角度都是 45 度,即使它必须穿过球棒本身!我也尝试过改变球的旋转,但它只是没有考虑到它。我该怎么办!?
      • 查看这个 SO 问题:stackoverflow.com/questions/2212042/… 这看起来是关于您要解决的问题,并给出了非常清晰的解释。
      【解决方案3】:

      您可能应该首先计算球棒与水平方向的距离(例如,挥杆时球棒的距离),然后将球棒旋转 90 度以获得击球所需的角度。

      【讨论】:

      • 这没有考虑球的当前速度。你仍然需要从这个向量中进行反射,而不是仅仅分配它。
      • 您能花点时间解释一下您的想法吗?我已经在球棒的速度上反射了球,这是正常的,但它在第二季度仍然持续以 45 度。为什么球没有考虑任何变量?
      • 基本上,如果球击中时球棒是左右笔直的,球应该或多或少地直接往回走。如果球棒的末端(球员没有握住)比球员的末端更靠近屏幕底部(假设球从顶部进入),那么球就会向左移动。如果它离屏幕更远,那么球就向右。抱歉解释的混乱。
      • @Michael Dorgan: 也许我现在没有想清楚,但不管球的速度是多少,当它击中球棒并且球棒处于给定角度时,球就会进入同一个方向(距离是另一回事)。
      • 想象球棒在击球手周围挥动并以 45 度角接触球(球棒与来球的速度成 45 度角),因为他挥杆早。产生的反射应该使球以与原始球速度成 90 度角射出,从而导致犯规球。请不要让我在这方面诉诸 ascii 艺术 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 2018-04-16
      • 2013-06-27
      • 1970-01-01
      • 2010-11-28
      相关资源
      最近更新 更多