Как выстраивать связи между объектами в компонентной системе?
В 27 посте "Как передавать данные между объектами" мне нужно было передать направление из объекта "джойстик" в объект "игрок", чтобы он потом двигать игрока по этому направлению.
Чтобы передать данные я просто вставил ссылку на джойстик внутрь игрока. Конечно код был рабочий, но... Представьте радиоуправляемую машинку. Есть отдельно пульт управления отдельно катается машинка и мы не кладём пульт на машинку чтобы ей управлять верно? Чтобы управлять машинкой, мы с помощью пульта посылаем сигналы "по воздуху" машинке и она едет. Вот именно так с помощью сигналов нужно связывать объекты в программировании. Вообще я знал об этом, потому что написал про систему сигналов в годо и сообщений в дефолде, которые работаю примерно по такому принципу и... я даже не знаю почему решил сделать по другому.
Вот как я реализовал передачу сообщений от джойстика к игроку:
...
onMousePress(() => {
...
this.parent.trigger("startMove")
...
})
onMouseDown(() => {
...
this.parent.trigger("input", this.direction)
...
})
onMouseRelease(() => {
...
this.parent.trigger("endMove")
...
})
...
Суть в том что и игрок и джойстик "наследуются" от объекта game (на самом деле это не наследование, а связь parent - child о которой я писал в 21 посте). И вот этот объект game выступает в качестве "воздуха" по которому передаются сигналы. В коде изменилось только то, что мы триггерим события не у самого джойстика "this.trigger()", а у его родителя - game "this.parent.trigger()".
Закончились символы ->
