C# - 在查看基本实例列表时,如何查看某个实例的子类?
C# - How do I see what subclass a certain instance is when looking through a list of base instances?
我正在使用 XNA 开发一款游戏作为学校项目。我正在尝试在我的 "Entity" 基础 class 中创建一个代码,用于检查我当前与 "Entity" 的哪个特定子 class 发生碰撞。
这是我到目前为止一直在尝试使用的:
在"Entity"
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;
}
in "Player"(就像 "Enemy","Entity" 的子class)
if (CheckCollisionWithEntity(Position) is Enemy)
{
Game1.instance.reloadLevel();
}
我的问题是,当我与一个 "Enemy" 实例发生碰撞时,没有任何反应。
我知道 "reloadLevel()" 方法有效,我已经尝试将其切换为调试代码。
我在这里做错了什么?我误解了 "is" 参考吗?
敌人对撞机正在为其他不太具体的碰撞检查类型工作。
这就是is
的用法,所以返回的对象不能是Enemy
对象。
你说你交换了调试代码 - 你是否验证过该方法确实返回了一个对象,该对象是或派生自 Enemy
?单步执行您的代码并检查返回的内容 - 也许您的碰撞检测代码不起作用并且您总是返回 null
(null is someClass
将始终评估为 false
)。您的方法 returns 仅将第一个 Entity
确定为碰撞 - 是否可以在任何 Enemy
实体之前检测到非 Enemy
实体?
我正在使用 XNA 开发一款游戏作为学校项目。我正在尝试在我的 "Entity" 基础 class 中创建一个代码,用于检查我当前与 "Entity" 的哪个特定子 class 发生碰撞。
这是我到目前为止一直在尝试使用的:
在"Entity"
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;
}
in "Player"(就像 "Enemy","Entity" 的子class)
if (CheckCollisionWithEntity(Position) is Enemy)
{
Game1.instance.reloadLevel();
}
我的问题是,当我与一个 "Enemy" 实例发生碰撞时,没有任何反应。 我知道 "reloadLevel()" 方法有效,我已经尝试将其切换为调试代码。 我在这里做错了什么?我误解了 "is" 参考吗? 敌人对撞机正在为其他不太具体的碰撞检查类型工作。
这就是is
的用法,所以返回的对象不能是Enemy
对象。
你说你交换了调试代码 - 你是否验证过该方法确实返回了一个对象,该对象是或派生自 Enemy
?单步执行您的代码并检查返回的内容 - 也许您的碰撞检测代码不起作用并且您总是返回 null
(null is someClass
将始终评估为 false
)。您的方法 returns 仅将第一个 Entity
确定为碰撞 - 是否可以在任何 Enemy
实体之前检测到非 Enemy
实体?