Был ли у тебя опыт разработки игровых интерфейсов
Что проверяют
Есть ли у вас реальный опыт в интерфейсах, где важны кадры в секунду, анимации и ввод, или только общее фронтенд-прошлое. Следом спрашивают про инструменты и про самую сложную техническую проблему в таком проекте.
Как отвечать
Если опыт был, опишите один проект конкретно: что за игра или игровая механика, ваша роль, стек и одна трудность, которую вы решили. Каркас технической части:
- рендеринг: Canvas 2D или WebGL через PixiJS, Phaser или Three.js; меню и формы часто держат DOM-слоем поверх канваса;
- кадр: цикл на
requestAnimationFrame, бюджет примерно 16,7 мс на кадр при 60 fps, движение считают от дельты времени, а не от числа кадров; - React рядом с игрой: состояние, которое меняется каждый кадр, не проходит через
setState, его держат вrefили во внешнем сторе, иначе ререндеры съедают кадр; - ресурсы: атласы текстур, спрайтшиты, явное освобождение текстур при уходе со сцены, вес ассетов;
- экраны и ввод:
devicePixelRatio, масштабирование под разные экраны, Pointer Events для мыши и тача; - звук: браузеры не дают играть аудио до первого действия пользователя,
AudioContextстартует приостановленным.
Цифры приводите свои и только те, на которые вы влияли: fps на слабом устройстве, время загрузки, вес ассетов. Рост аудитории игры это заслуга всей команды, а не интерфейса.
Если опыта не было, так и скажите, а затем перекиньте мостик к смежному: сложные анимации, drag-and-drop, графики на канвасе, интерфейсы реального времени. Добавьте, как бы вы подошли к задаче, и спросите, на каком движке работает команда. Небольшой пет-проект на PixiJS закрывает этот пробел лучше любых слов.
Где спотыкаются
Выдумывают опыт и метрики продукта вроде «+30% активных пользователей». На втором уточняющем вопросе про устройство сцены такая история рассыпается.
Говорят только о визуальной части и дизайне, не упоминая производительность, память и загрузку ассетов. Для игрового фронтенда это основная работа.
Предлагают вести игровое состояние через обычный React-стейт с обновлением 60 раз в секунду и не знают про requestAnimationFrame.