Прежде всего, извините, если это вопрос n00b.Я веб-разработчик-самоучка, и это мой первый настоящий опыт в приложениях.Я пытался найти ответ на то, что я ищу, но я не уверен в правильной терминологии и поэтому не нашел соответствующих результатов.Я полагаю, это потому, что либо я не знаю, как правильно спрашивать, что мне нужно;ответ настолько очевиден, что не нужно писать о нем, или то, что я спрашиваю, настолько глупо, что понятия не существует, и я должен полностью сделать это по-другому.
В любом случае, на мой вопрос.Я работаю над приложением, в котором есть 3 класса, которые доставляют мне неприятности.Существует MainContainer, который в основном обрабатывает пользовательский интерфейс;«Назначитель», который выбирает задачи для выполнения;и «работник», который выполняет задачи.Это на очень ранней стадии, но сейчас это выглядит примерно так.
class MainContainer
def setup
@worker = Worker.new(:x => 200, :y => 200)
@assigner = Assigner.new(:x => 400, :y => 300)
end
# update & draw code
end
class Assigner
def set_target
parent.worker.target self.x, self.y
end
# input, update & draw code
end
class Worker < GameObject
def target(tx, ty)
@target_x = tx
@target_y = ty
@has_task = true
end
# update & draw code
end
Основной поток приложения выглядит примерно так: загружается экземпляр MainContainer, который отображает на экране пользовательский интерфейс, включая исполнителя и работника.Затем пользователь использует присваиватель для перемещения по пользовательскому интерфейсу и выбора задачи.До этого момента все работает отлично.
Что я не могу понять, так это то, как Назначитель может передать значение работнику.Код, который я имею в этом примере, является методом set_target работника.Строка parent.worker.target self.x, self.y
- самая последняя из моих попыток.Другие вещи, которые я здесь пробовал, включают такие вещи, как @worker.target self.x, self.y
Я думал о том, чтобы передать @worker
в @assigner
, но план состоит в том, чтобы было произвольное число работников, которое увеличится/ уменьшается со временем.Я планирую обработать их с помощью WorkerManager
, который будет отслеживать, сколько рабочих в настоящее время доступно, но если я передам это в @assigner, не будет ли это просто переданной копией?Я все еще далека от реализации чего-то подобного, поэтому я не проверял это, может быть, это путь?
Еще одна вещь, о которой я подумал, это иметь работника в качестве глобального, но этоэто проблема, которая, скорее всего, будет возникать снова довольно часто, поэтому я в конечном итоге получу приложение, полное глобальных переменных, я думаю, что это не правильный путь!
Я из web-разработчика, поэтому единственный другойРешение, которое я могу придумать, заключается в том, чтобы создать базу данных.Это последнее средство, если я не смогу сделать что-нибудь еще.
В любом случае, переформулировать мой вопрос.В экземпляре MainContainer, как я могу заставить его Assigner и Worker передавать данные между собой?
Я бы очень признателен за любую помощь, даже если она выглядит примерно так: "stfu n00b, прочитайте это: -relevant link".