Я написал игру так, что её правила не знают про Three.js. Объясняю зачем
n1ghtmare-dev 43 минуты назад Я написал игру так, что её правила не знают про Three.js. Объясняю зачем Средний 5 мин 1.4K Проектирование и рефакторинг * TypeScript * Тестирование веб-сервисов * Разработка игр * Мнение...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: n1ghtmare-dev 43 минуты назад Я написал игру так, что её правила не знают про Three. Объясняю зачем Средний 5 мин 1. 4K Проектирование и рефакторинг * TypeScript * Тестирование веб-сервисов * Разработка игр * Мнение Игры редко пишут по чистой архитектуре, и на то есть причины: обычно игровой объект сам держит меш, сам дёргает физическое тело и сам решает правила.
Так быстрее, и в геймдеве это норма, а не грех. Я в своём браузерном платформере поступил иначе: правила игры не знают ни про Three. js, ни про Rapier, ни про DOM.
Технические детали
Ниже - во что это обошлось, и что дало взамен. Спойлер: главное, что дало, - тесты, которые проходят за секунды и не зависят от того, насколько медленно на конкретной машине рисуется кадр. ИграВот что получается на выходе.
Ниже - почему код под этим устроен именно так. СлоиСтрелки смотрят внутрь. Домен сидит в центре и принципиально ни на кого не оглядывается.
Одно правило, на котором всё держитсяОно жёсткое и без исключений: в src/domain запрещены импорты three, rapier, DOM API и любых адаптеров. Только стандартный TypeScript. Дальше всё вытекает само.
Отраслевые последствия
Домен не может «просто позвать движок» - значит, всё нужное ему приходит аргументом, а всё, что он хочет сделать с миром, он возвращает как данные. Правила прогресса - чистые функции вида «событие → новое состояние + эффекты». Функция onEntityEnter не удаляет меш и не трогает коллайдер.
Она возвращает новый прогресс и список эффектов, которые исполнит кто-то другой. ПортыМежду доменом и внешним миром - интерфейсы. Их немного, и весь контракт игры с физикой влезает в один экран:export interface export interface Обратите внимание на то, чего в PhysicsPort нет.
Нет RigidBody, нет Collider, нет ни одного типа из Rapier. Есть LevelDef, CubeState, Vec3 - мои собственные структуры. Реализация RapierPhysics знает про Rapier; всё, что выше неё, - нет, и это принципиально.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





