【问题标题】:XNA BoundingBox & OriginXNA 边界框和原点
【发布时间】:2013-07-17 20:51:06
【问题描述】:

我已经看到了一些关于这个主题的答案,但没有一个真正有太大帮助。

很简单,BoundingBox 碰撞。将原点设置为 0,0 时,碰撞发生得很好(至少对于我想要的那样)。当我将玩家的原点指定到中心时(因此它围绕中间旋转),碰撞似乎是偏移的,它在错误的时间检测到碰撞

代码(播放器类):

     box = new BoundingBox(new Vector3(location, 0), new Vector3(location.X + texture.width, location.Y + texture.height, 0));
     origin = new Vector2(texture.Width / 2, texture.Height / 2);

            location.X += speed * (float)Math.Cos(rotation - anglecorrection);
            location.Y += speed * (float)Math.Sin(rotation - anglecorrection);

public BoundingBox getBox()
        {
            return box;
        }

代码(游戏)

BoundingBox box2 = new BoundingBox(new Vector3(location, 0), new Vector3(location.X + 30, location.Y + 30, 0));

 if (player.getBox().Intersects(box2))
            {
                // Do Stuff
            }

感谢您的帮助:)

【问题讨论】:

  • 你的碰撞检测代码是什么样的?
  • 那段代码在哪里?它在你的播放器里面吗? box 和 origin 是实例变量吗?如果他们不是他们会发生什么?
  • 您的碰撞偏移量是多少?它似乎被原点向量的大小抵消了吗?是不是被更多抵消了?
  • 刚刚更新了帖子,希望更清楚。
  • player.getBox() 方法是什么样的?

标签: c# xna


【解决方案1】:

在玩了很多之后,我找到了一个可行的解决方案。

我将带有名为 box2 的 BoundingBox 的风景项目设置为在其中心也有一个原点。

因此,如果两个对象具有相同的原点,那么这似乎可以解决问题。

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 2013-08-30
    • 1970-01-01
    • 2013-02-18
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多