Добавить в корзинуПозвонить
Найти в Дзене

Добавляя интерфейс, я всё сломал

Учусь делать игры на Cocos, и часто сталкиваюсь с проблемами, о которых и подумать не мог в начале. В итоге я понял, что компоненты Widget и Layout могут конфликтовать. Это связано с тем, что при определённых настройках они оба могут изменять размеры ноды, тем самым перезаписывая состояние друг друга. Я думал, что компонент Widget с параметром AlignMode в положении ON_WINDOW_RESIZE (по умолчанию) работает как обычное событие изменения размера окна в веб-браузерах. Но, похоже, это работает как изменение размеров самой ноды, никакого браузера. А у компонента Layout параметр ResizeMode в положении CONTAINER работает предсказуемо. Layout изменяет размер Node и заставляет реагировать Widget. Widget тоже меняет размер Node и заставляет реагировать Layout. Замкнутый цикл. Решение такое: при построении интерфейса у Widget параметр AlignMode всегда должен быть ONCE. Это поведение выставляет размер только при создании узла, один раз. А дальше с нодой можно делать что угодно, например, примен

Добавляя интерфейс, я всё сломал

Учусь делать игры на Cocos, и часто сталкиваюсь с проблемами, о которых и подумать не мог в начале.

В итоге я понял, что компоненты Widget и Layout могут конфликтовать. Это связано с тем, что при определённых настройках они оба могут изменять размеры ноды, тем самым перезаписывая состояние друг друга.

Я думал, что компонент Widget с параметром AlignMode в положении ON_WINDOW_RESIZE (по умолчанию) работает как обычное событие изменения размера окна в веб-браузерах. Но, похоже, это работает как изменение размеров самой ноды, никакого браузера. А у компонента Layout параметр ResizeMode в положении CONTAINER работает предсказуемо.

Layout изменяет размер Node и заставляет реагировать Widget. Widget тоже меняет размер Node и заставляет реагировать Layout. Замкнутый цикл.

Решение такое: при построении интерфейса у Widget параметр AlignMode всегда должен быть ONCE. Это поведение выставляет размер только при создании узла, один раз. А дальше с нодой можно делать что угодно, например, применять Layout для выравнивания.

#РазработкаИгр #CocosCreator #TypeScript