所以,我用这个方法来检测当按下按钮时玩家面前是否有任何东西,问题是,即使是没有out参数的同样方法也很难(它返回任何在玩家面前的人)似乎工作,这个抛出一个无效的强制转换异常,即使我研究了我仍然不知道这里有什么问题。
有问题的功能代码:
public bool isThereAnythingThere(Rectangle rec, out NPC other) {
bool tmp = false;
other = null;
foreach (NPC npc in gol)
{
if (npc.collider.Intersects(rec))
{
tmp = true;
other = npc;
}
}
return tmp;
}
触发它的玩家功能:
void Action1()
{
NPC go = null;
switch (facingDirection) {
case Direction.Up: if (!game.isThereAnythingThere(UpRectangle), out go) ;
break;
case Direction.Down: if (!game.isThereAnythingThere(DownRectangle), out go) ;
break;
case Direction.Left: if (!game.isThereAnythingThere(LeftRectangle), out go) ;
break;
case Direction.Right: if (!game.isThereAnythingThere(RightRectangle), out go) ;
break;
} //Now go equals the object in the direction where facing, if theres no object, is null
if (go != null)
game.textBox.AddText(go.GetDialogue());
}
}
PS:gol
是我游戏中所有GameObject
的列表;
GameObject
是Player
和NPC
都继承自的类。
答案 0 :(得分:2)
您的问题是,您正在浏览可能包含非NPC
内容的列表,并告诉foreach
尝试将所有内容投射到NPC
。< / p>
最简单的解决方法是使用Linq OfType<T>
按类型过滤列表:
foreach (NPC npc in gol.OfType<NPC>())