XNA:只在初始交叉点上调用矩形交集

时间:2014-03-29 23:34:19

标签: c# xna collision-detection intersection rectangles

我目前正在xna中做一名自上而下的射击游戏。我已经成功地在项目中解决了这个不断出现的问题,但现在我正在编写游戏玩法,并且正在调整我的碰撞。如果他们与敌人接触,我希望玩家的生命只下降1,但是如果矩形相交,则以软件的刷新率调用它(或者现在我已经考虑过它了)所以玩家生命实际上在第二个十字路口下降了几十个。有办法阻止这个吗?

不起作用的示例代码:

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

我知道这看起来很简单,但整个星期一直在弄乱我的游戏。预先感谢您的任何帮助或建议!

1 个答案:

答案 0 :(得分:2)

将您的状况改为:

(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)))

其中playerLocation和enemyLocation代表玩家和敌人的中心点

相关问题