XNA:仅在初始交集上调用矩形交集

本文关键字:调用 XNA | 更新日期: 2023-09-27 17:55:08

我目前正在xna中制作一个俯视射击游戏。我已经设法在项目中多次解决这个持续的问题,但现在我正在对游戏玩法进行编程,它正在搞砸我的碰撞。我希望玩家的生命值在与敌人接触时只减少 1,但如果矩形相交,则以软件的刷新率调用它(或者现在我想到它已经完成了),所以玩家的生命实际上减少了几十个交集的第二个。有没有办法阻止这种情况?

不起作用的示例代码:

            if (playerRectangle.Intersects(enemyRectangle))
            {
                enemyAlive = false;
                playerLives--;
            }

我知道这看起来很简单,但它整个星期都在扰乱我的游戏。提前感谢您的任何帮助或建议!

XNA:仅在初始交集上调用矩形交集

将您的条件更改为:

(playerRectangle.Intersects(enemyRectangle) && enemyAlive)

这应该可以为您解决问题。

编辑:正如Zhafur指出的那样,可以进行一个简单的优化:

(enemyAlive && playerRectangle.Intersects(enemyRectangle))

我要指出的是,Intersects方法必须检查玩家矩形的所有 4 条边和敌人矩形的所有 4 条边。然后,这将使这个简单的调用类似于 16 个较小的检查。如果有人肯定知道这个数字,如果我错了,请纠正我。就个人而言,我会做这样的事情:

float playerSize = 16f; // These are the _radius_ not the diameter.
float enemySize = 16f;

然后将条件中的 Intersects 方法替换为对 Vector2.Distance 的调用:

(enemyAlive && (playerSize + enemySize >= Vector2.Distance(playerLocation, enemyLocation)))
其中玩家位置和敌人

位置表示玩家和敌人的中心