-1

我正在尝试用 XNA 创建一个平台游戏。我不知道如何检测对象是否位于“字符”对象下方,以便在它不在对象上方时将其向下移动。

4

2 回答 2

1

你所说的概念叫做碰撞检测,基本上是任何游戏的核心。

在 XNA 中处理碰撞检测的最简单方法之一是使用 Rectangle。您的每个实体(角色、物品、武器、硬币、敌人)都应该使用 Rectangle 作为碰撞箱。让我们研究一个简单的例子:

class Player
{
    public Rectangle hitBox = new Rectangle(0, 0, 10, 30);
    ...
}

class Coin
{
    public Rectangle hitBox = new Rectangle(50, 50, 5, 5);
    ...
}

如您所见,这两个实体都有一个 Rectangle 用于碰撞检测(您也可以将其用于绘图,但我通常使用 Vector2)。

现在,如何检查是否有碰撞?这很简单:

class Game
{
    Player player = new Player();
    Coin coin = new Coin();

    if (player.hitBox.Intersects(coin.hitBox))
    {
        // Do your stuff
    }
}

当然,每次移动玩家时,都需要相应地设置 hitbox 的位置。假设您将玩家向右移动 5 个像素,您还需要将碰撞框向右移动 5 个像素。

于 2013-06-14T08:12:21.163 回答
0

您应该使用 BoundingBox 来检测碰撞,并比较简单的位置来检查它是否在“下方”某物。那是二维的,伙计,很简单,就像纸一样……

如果你的游戏是 3D 的,我的答案是一样的。

于 2013-06-13T11:54:38.437 回答