【发布时间】:2017-06-22 11:21:51
【问题描述】:
我正在使用 XNA 作为学校项目开发游戏。我正在尝试在我的“实体”基类中创建一个代码,以检查我当前正在与哪个特定的“实体”子类发生冲突。
这是我到目前为止一直在尝试使用的:
在“实体”中
protected Entity CheckCollisionWithEntity(Vector2 pos)
{
Rectangle r = new Rectangle((int)pos.X, (int)pos.Y, _texture.Width, _texture.Height - 1);
foreach (Entity e in _entities)
{
if (r.Intersects(e.Collider))
{
if(e != this)
return e;
}
}
return null;
}
在“玩家”中(与“敌人”类似,是“实体”的子类)
if (CheckCollisionWithEntity(Position) is Enemy)
{
Game1.instance.reloadLevel();
}
我的问题是,当我与“敌人”实例发生碰撞时 - 什么也没有发生。 我知道“reloadLevel()”方法有效,并且我尝试将其切换为调试代码。 我在这里做错了什么?我是否误解了“是”参考? 敌人 Collider 正在为其他不太具体的碰撞检查类型工作。
【问题讨论】:
-
CheckCollisionWithEntity将退出,返回找到的第一个实体。如果玩家与两个或更多实体发生碰撞,而其中只有一个是敌人怎么办? -
返回一个 IEnumerable
并使用 LINQ 的强大功能与 CheckCollisionsWithEntities( .. ).OfType () -
@SirRufo 我不熟悉这个函数,你能指定我将如何在我的代码中使用它吗?提前致谢!
标签: c# list xna base-class