如何在XNA中的2D汽车游戏中添加碰撞检测?

时间:2011-11-30 18:09:35

标签: xna-4.0

是的,我正在制作一款2D赛车游戏。到目前为止,我已经有了汽车移动等(当然有一点帮助),并想知道如何在XNA中添加碰撞检测。我已经采取了一个保险杠部分(来自整个轨道),并将其作为一个单独的.png文件。而我正在考虑在它周围增加一个碰撞检测盒(所以如果'汽车'碰到'碰碰'的话会一直向后移动)。如何将碰撞检测添加到保险杠中,并将其与汽车集成?谢谢!

2 个答案:

答案 0 :(得分:0)

试用本教程:http://create.msdn.com/en-US/education/catalog/tutorial/collision_2d_perpixel

本教程的源代码位于下载中,位于两个(丑陋的)蓝色框下面。

答案 1 :(得分:0)

如果汽车始终是直的 - 而不是旋转,这似乎会容易得多。如果它们被旋转,您将无法使用矩形来提供帮助。 如果你这样做,那么你可以把保险杠包含在car.png中。 然后你可以使用汽车的坐标并添加某些值来获得保险杠区域的长度和宽度。 然后你可以做

Rectangle bumperBoundingBox = new Rectangle
(
    (int)X_COORDINATE_OF_CAR, 
    (int)Y_COORDINATE_OF_CAR, 
    (int)X_COORDINATE_OF_CAR + WIDTH_OF_BUMPER, 
    (int)Y_COORDINATE_OF_CAR + HEIGHT_OF_BUMPER
);
Rectangle otherCarBoundingBox = new Rectangle( \* x, y, ... *\ );
bool carIsTouchingBumper = otherCarBoundingBox.Intersects(bumperBoundingBox);

这可能不完美,因为矩形的参数可能是不同的顺序或类似的东西。但是一旦你拥有它,你就可以使用carIsTouchingBumper来做事。

如果你想让保险杠成为一个单独的图像,你可以做同样的事情,除了使用保险杠的坐标。此外,你必须让保险杠跟随汽车。