if (IsColliding(player, pirate) == true)
Прежде всего, никогда этого не пиши. Выглядит дилетантски говорить «если это правда , что они сталкиваются». Скажите «если эти вещи сталкиваются»:
if (IsColliding(player, pirate))
Аналогично, предпочитайте if (!whatever)
if (whatever == false)
.
Во-вторых, , пожалуйста, используйте существительные во множественном числе для коллекций . Это должно быть pirates
, а не pirate
. Вы хотите подчеркнуть, что есть коллекция из них для читателя.
Ошибка в «пиратском» говорит о том, что он не может конвертировать из «Списка» в «Врага»
Ваш IsColliding
берет стрелка и врага, но вы даете ему стрелок и список врагов. IsColliding
не знает, как с этим справиться.
Вы уже знаете, как это исправить . Вы хотели переместить каждого врага, поэтому вы написали:
foreach (Enemy p in pirate)
{
p.Move();
}
Теперь вы хотите проверить каждого врага на столкновения, поэтому сделайте то же самое:
foreach (Enemy p in pirate)
{
if (IsColliding(player, p)) { ... }
}
Продвинутая техника, которую вы в конечном итоге освоите, - это использование понимания запросов для последовательностей:
var collisions = from p in pirate
where IsColliding(player, p)
select p;
foreach (Enemy p in collisions)
{
... handle the collision...
}
Но научитесь ходить, прежде чем пытаться бежать.