XNA - 碰撞永远不会发生
本文关键字:永远 碰撞 XNA | 更新日期: 2023-09-27 18:33:25
我正在XNA中创建游戏,我需要碰撞检测逻辑:
public Rectangle boundingBox = new Rectangle((int)playerShipPos.X, (int)playerShipPos.Y, frameWidth, frameHeight);
this.boundingBox = new Rectangle((int)meteorPosPub.X, (int)meteorPosPub.Y, (int)meteorTexture.Width, (int)meteorTexture.Height);
for (int i = meteorList.Count - 1; i >= 0; i--)
{
meteorGenerator meteor = new meteorGenerator(Vector2.Zero);
if (meteorList[i].meteorPosPub.Y > 664)
{
meteorList.RemoveAt(i);
if (meteor.boundingBox.Intersects(playerShip.boundingBox))
{
meteorList.RemoveAt(i);
}
}
}
所以我想达到这个效果:如果玩家飞船碰到流星,流星就会隐藏并从列表中删除,但实际上什么也没发生。
for (int i = meteorList.Count - 1; i >= 0; i--)
{
meteorGenerator meteor = new meteorGenerator(Vector2.Zero);//you are creating new list meteors every frame, this is ridiculous
if (meteorList[i].meteorPosPub.Y > 664)
{
meteorList.RemoveAt(i);//if you are removing a position from a list, not destroying the meteor
if (meteor.boundingBox.Intersects(playerShip.boundingBox))
{
meteorList.RemoveAt(i);//you already did this, this conditional is unnecessary
}
}
}
我不知道你在做什么,但这就是我会做的。
1.让玩家和流星继承具有实体对象属性的类。
根据对象类型将它们添加到具有唯一 ID 的列表中。
每一帧,检查 ID(这使您可以额外控制要与什么碰撞的内容)。
继续检查冲突,如果您想删除元素,只需将其从列表中删除并销毁即可。