Я думаю, что нам нужно больше информации.Есть некоторые вещи, которые я не вижу в примере кода или объяснении:
- Какой конкретный объект вы передаете в функцию mediumDifficulty?Это явно не ZigZagMovement, так как это переменная члена движения AbstractTarget.
- Когда вы создаете конкретный подкласс AbstractTarget?Каков конкретный подкласс класса AbstractTarget?Вы не опубликовали код для этого.Вы уверены, что он на самом деле создал объект движения к тому времени, когда он был передан функции mediumDifficulty?
Похоже, происходит то, что подкласс AbstractTarget, который вы тестируете изолированно, имеет IMovement, но нетот, который вы передаете функции mediumDifficulty, но без дополнительной информации трудно сказать.
(Настройка вики сообщества на случай, если я что-то упустил)
РЕДАКТИРОВАТЬ: Сновая информация -
Похоже, что у вас есть переменная уровня класса с именем "target", которой вы назначаете свое движение, и что у вас также есть параметр с именем "target" в вашем mediumDifficulty ()подпись функции, и что вы на самом деле не передаете целевой объект уровня класса в функцию.Это приводит к тому, что когда mediumDifficulty пытается определить значение цели, он становится пустым, потому что он смотрит на параметр, а не на переменную уровня класса.Возможно, именно так вам удастся отследить target и target.movement в функции start (), но не получить никаких значений в mediumDifficulty.
Постарайтесь в будущем иметь параметры функции или переменные области действия не обмениваться именами с переменными класса, чтобы сократить эту путаницу.