#c# #oop #xna
#c# #ооп #xna
Вопрос:
Первое сообщение итак, привет! (пожалуйста, поправьте меня, если я неправильно использую какой-то термин)
У меня есть экран класса, в котором я создаю экземпляр другого класса с именем Player (давайте назовем этот экземпляр Player). Теперь на экране у меня есть метод под названием ResetHUD, который я хотел бы вызвать из проигрывателя.
Как бы я это сделал? Единственный код внутри ResetHUD — это 1 строка, которая устанавливает переменную в другую переменную. Насколько я знаю, я могу использовать EventHandler (но поскольку ResetHUD не нуждается ни в каких аргументах, я думаю, что я использую это неправильно) или делегаты (которые я понятия не имею, как использовать).
Помощь приветствуется!
Комментарии:
1. пожалуйста, поместите свой код в Q, если вы можете
Ответ №1:
Похоже, у вас есть отношение сдерживания … экранный объект содержит один (или несколько?) Объекты проигрывателя.
Когда Screen создает Player, он может установить свойство для Player, указывающее родительский (создающий) экранный объект.
class Player
{
private Screen parentScreen;
public Player(Screen parentScreen) { this.parentScreen = parentScreen; }
public MyMethodThatHasToCallScreensMethod()
{
parentScreen.ResetHUD();
}
}
class Screen
{
public Player CreatePlayer()
{
return new Player(this);
}
}
Вы также можете использовать события (события, кстати, могут иметь параметры или нет, в зависимости от того, что вам нужно).
Это мой любимый учебник по событиям и делегатам в C #. Начинается просто и выполняется на каждом шаге.
http://www.akadia.com/services/dotnet_delegates_and_events.html
Комментарии:
1. Экран содержит 1 или более игроков, да. Я думал о передаче его в качестве аргумента, но, похоже, это было бы плохой практикой или просто плохо делать это. Я прочитаю о делегатах и событиях. Спасибо!
Ответ №2:
Поместите свойство MyScreen в класс Player. Когда вы создаете класс Player, установите это свойство в свой класс screen. Теперь у вас есть ссылка на экран, который вы можете вызвать из проигрывателя.
Ответ №3:
Ну, что-то в Player
должно иметь ссылку на Screen
экземпляр. Опции:
- Когда вы создаете
Player
, передайтеthis
конструктору, чтобы он мог запомнить, кScreen
которому он принадлежит - Создайте событие на
Player
и подпишитесь на него сScreen
- Передайте
Screen
в качестве параметров по соответствующей цепочке вызовов метода (в вашей ситуации это может быть непрактично)