XNA:仅在初始交集上调用矩形交集
本文关键字:调用 XNA | 更新日期: 2023-09-27 17:55:08
我目前正在xna中制作一个俯视射击游戏。我已经设法在项目中多次解决这个持续的问题,但现在我正在对游戏玩法进行编程,它正在搞砸我的碰撞。我希望玩家的生命值在与敌人接触时只减少 1,但如果矩形相交,则以软件的刷新率调用它(或者现在我想到它已经完成了),所以玩家的生命实际上减少了几十个交集的第二个。有没有办法阻止这种情况?
不起作用的示例代码:
if (playerRectangle.Intersects(enemyRectangle))
{
enemyAlive = false;
playerLives--;
}
我知道这看起来很简单,但它整个星期都在扰乱我的游戏。提前感谢您的任何帮助或建议!
将您的条件更改为:
(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)))
其中玩家位置和敌人位置表示玩家和敌人的中心点。