Уильям,
Проблема в том, что _floor.GetRoomByIndex(CheckActiveRoomIndex())
это не StandardRoom , а Комната (или базовый класс, независимо от названия)
1 / Решение ближе к существующему коду Отсутствует приведение, так что комнаты можно рассматривать как StandardRoom : используйте ключевое слово как для приведениябезопасный путь.
И не повторяйте себя (принцип СУХОГО), объявите переменную (stdRoom).
StandardRoom stdRoom = _floor.GetRoomByIndex(CheckActiveRoomIndex()) as StandardRoom;
if ( stdRoom != null )
{
for (int i = 0; i < stdRoom.enemies.Count; i++)
{
stdRoom.enemies[i].UpdateBoundingBox();
}
}
Как говорит Оливье ниже, с шаблоном C # 7соответствие (Visual Studio 2017+), приведение может быть короче:
if ( _floor.GetRoomByIndex(CheckActiveRoomIndex()) is StandardRoom stdRoom )
2 / Ответ Linq
Enumerable.SelectMany
может использоваться дляполучить врагов из комнаты
if ( _floor.GetRoomByIndex(CheckActiveRoomIndex()) is StandardRoom stdRoom )
{
// projection to get Enemies from StandardRoom
foreach( Enemy e in stdRoom.SelectMany( r => r.enemies ) )
{
e.UpdateBoundingBox()
}
}
С уважением