【问题标题】:XNA Rectangle overlay on an texture for Intersect collisions相交碰撞纹理上的 XNA 矩形叠加
【发布时间】:2012-06-30 04:39:10
【问题描述】:

全部。

我们正在尝试让一些相交碰撞工作,但问题是矩形没有覆盖纹理上的校正。

纹理是 20x340 像素的图像。在纹理类 (Net) 中,我们有一个 Rectangle 用作碰撞框(SetCollisionBox 方法)。我们在Game 类中定义了以下内容(在LoadContent() 方法下)。

g_Net = new Net("Net1");
g_scene.Place(g_Net, new Vector3(8, 100, 1));
g_Net.SetCollisionBox(new Rectangle((int)g_Net.Position.X, (int)g_Net.Position.Y, 20, 340));

我们遇到的问题是矩形被绘制在纹理(网络)上方并且调整高度确实使它更对齐,但是只有上面可以与球对象碰撞g_Ball.ballRectIntersect(g_Net.netRect)netRectNet 类中的公共成员 RectangleballRectBall 类的等价物。

所以我的问题是如何让Rectangle 叠加层正确出现在纹理上,以便碰撞与整个网络纹理相对应?有没有更好的方法来放置这个叠加层?

非常感谢您。

干杯。

  • 山姆。

【问题讨论】:

  • 你有图片来展示它的样子吗?
  • 看看 SetCollisionBox 做了什么会有所帮助。
  • public void SetCollisionBox(Rectangle rect) { netRect = rect; }
  • 其中netRectpublic Rectangle netRect 也在Net 类中。
  • 绘制一个原始矩形并在其上放置纹理会更好吗?谢谢。

标签: c# xna textures


【解决方案1】:

我假设你的纹理是 2D 的,因为你说的是​​ Texture 并且你使用的是 Rectangle 而不是 BoundingBox。

在那种情况下,这很容易回答。

要设置碰撞属性,请按以下步骤操作。假设位置是我们的纹理位置,纹理是我们加载的纹理。

Rectangle boundingRect = new Rectangle(position.X, position.Y, position.X + texture.Width, position.Y + texture.Height);

另外,如果您的游戏是 2D 游戏,则不应使用 Vector3 来存储位置,除非迫不得已。尝试使用 Vector2,它会节省一些内存。

干杯!

【讨论】:

    猜你喜欢
    • 2016-08-31
    • 2010-09-28
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多