Предисловие
У меня есть обобщенный вопрос о том, как обращаться с двумя отдельными классами, которым требуется информация из одного из двух. Предположим, у нас есть 2 класса: A и B . Класс A будет классом, с которым взаимодействует клиент. Для простого случая давайте также скажем, что класс A является обобщенным сценарием, который дает что-то здоровье, а класс B является сценарием hitbox. Класс A имеет две переменные: число c здоровья и логическое значение для смерти. Класс B имеет один логический тип, если хитбокс может атаковать. Я выделю эти классы в C#.
Класс A
public class A{
double health = 100;
bool dead = false;
public void damage(double amount){
health -= amount;
if(health <= 0){
health = 0;
dead = true;
//code to run after death...
}
}
}
Класс B
public class B{
bool canHit = true;
void Hit(){
//do some hit code here...
}
}
Теперь предположим, что эти два класса должны работать вместе, поскольку они привязаны к одному игроку / врагу. Чтобы класс hitbox знал, что он больше не может ударить, он должен знать, что он мертв; Вот где мой вопрос вступает в игру.
Вопрос
Как я должен сообщить классу B , что он мертв, и какой путь лучший способ сделать это?
Я уже знаю несколько способов сделать это, но я хотел бы получить более глубокое понимание того, существует ли правильный путь и почему он будет правильным по сравнению с другими. Вот некоторые из моих решений:
Решение 1
Класс A имеет ссылку на класс B , и там это функция в классе B , которая переключает логическое значение canHit в значение false. Эта функция вызывается, когда игрок умирает.
Решение 2
Класс B имеет ссылку на класс A . Всякий раз, когда хитбокс хочет попасть, он проверяет, мертв ли класс A .
Я в основном пытаюсь выяснить, где у меня должна быть ссылка и как должна выполняться проверка. В этом сценарии я считаю, что Solution 1 лучше, потому что смерть вызывается один раз, и на все, что должно быть остановлено из-за смерти, можно просто сослаться и деактивировать все из класса A , тогда как решение 2 должно неоднократно проверять, может ли оно попасть или нет.
Опять же, это всего лишь конкретный c вариант использования, но я хотел бы получить некоторое представление о том, где должны быть ссылки и как изменить переменные классов на основе вхождений в других классах. Спасибо!