我目前正在xna中做一名自上而下的射击游戏。我已经成功地在项目中解决了这个不断出现的问题,但现在我正在编写游戏玩法,并且正在调整我的碰撞。如果他们与敌人接触,我希望玩家的生命只下降1,但是如果矩形相交,则以软件的刷新率调用它(或者现在我已经考虑过它了)所以玩家生命实际上在第二个十字路口下降了几十个。有办法阻止这个吗?
不起作用的示例代码:
if (playerRectangle.Intersects(enemyRectangle))
{
enemyAlive = false;
playerLives--;
}
我知道这看起来很简单,但整个星期一直在弄乱我的游戏。预先感谢您的任何帮助或建议!
答案 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代表玩家和敌人的中心点。