From ef29c114734a9bf799310984ef951cefb74e13b7 Mon Sep 17 00:00:00 2001 From: min Date: Tue, 2 Jun 2026 22:53:51 +0300 Subject: [PATCH] =?UTF-8?q?docs(12):=20=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B8=D0=BA=D0=B8=20=D0=A2=D0=B0=D0=BA=D1=81=D0=B8-?= =?UTF-8?q?=D0=B1=D0=BE=D1=81=D1=81=20(3=20=D0=BB=D0=BE=D0=BA=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8)=20+=20=D0=BA=D0=BE=D1=80=D0=BE=D1=82=D0=BA=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Карточка guide-taxi: упоминание 3 локаций (гараж/город/магазин), описание сжато до 1-2 предложений (как у соседних). Статья: триггер через GUI-кнопку, интерьер магазина, Try на 4-ю локацию. Заодно сжато описание guide-zavod. Co-Authored-By: Claude Opus 4.8 --- src/community/docsGames.js | 6 +-- src/community/docsLessons.jsx | 70 +++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/src/community/docsGames.js b/src/community/docsGames.js index c035355..678342c 100644 --- a/src/community/docsGames.js +++ b/src/community/docsGames.js @@ -335,12 +335,12 @@ export const GAMES = [ previewShot: 'guide-dynamic-label-scene.png', openProjectId: 2261, ready: true }, { id: 'guide-zavod', num: 58, group: 'g5', stars: 2, icon: 'cart', title: 'Мой завод — расстановка предметов (placement)', - desc: 'Tycoon-механика «купи → поставь»: магазин-инвентарь снизу, клик по слоту → полупрозрачная тень предмета летит за курсором, ЛКМ ставит на свой участок (можно стопкой), R/колесо — поворот, ПКМ/Esc — отмена. Денег мало → слот серый. Воксельный мир: трава, деревья, пруд.', + desc: 'Tycoon-механика «купи → поставь»: магазин-инвентарь снизу, тень предмета за курсором, ЛКМ ставит на участок (можно стопкой), нет денег → слот серый.', mechanics: ['game.placement.start', 'game.inventoryUi (магазин-слоты)', 'onPlace/onCancel/onMove', 'тень-превью формой модели', 'снап к сетке + стопка', 'проверка баланса (не в минус)', 'воксельные модели + ландшафт'], previewShot: 'guide-zavod-scene.png', openProjectId: 2345, ready: true }, { id: 'guide-taxi', num: 59, group: 'g5', stars: 2, icon: 'loader', title: 'Такси-босс — экран загрузки между мирами', - desc: 'Программный экран загрузки (как в Roblox при телепорте): кликнул такси → весь экран плавно затемняется, в центре снимок сцены, жёлтый прогресс-бар заполняется за 4с, процент, кнопка «Пропустить», спиннер «Загрузка». Дальше — телепорт в город и закатное небо. В городе кнопка «Магазин» делает короткий переход.', - mechanics: ['game.loading.transition (Promise)', 'game.loading.show (хэндл setProgress/close)', 'cover: sceneSnapshot (снимок сцены)', 'прогресс-бар + процент + спиннер', 'кнопка «Пропустить» (onSkip)', 'blockInput + пауза симуляции', 'воксельный город (такси/небоскрёбы)'], + desc: 'Три локации (гараж · город · магазин), между ними — красивый экран загрузки с прогресс-баром, спиннером и кнопкой «Пропустить», как в Roblox при телепорте.', + mechanics: ['game.loading.transition (Promise)', 'game.loading.show (хэндл setProgress/close)', 'cover: sceneSnapshot (снимок сцены)', 'прогресс-бар + процент + спиннер', 'кнопка «Пропустить» (onSkip)', 'blockInput + пауза симуляции', '3 локации = телепорт + смена окружения', 'воксельный город + интерьер магазина'], previewShot: 'guide-taxi-scene.png', openProjectId: 2427, ready: true }, ]; diff --git a/src/community/docsLessons.jsx b/src/community/docsLessons.jsx index 13f6103..6722729 100644 --- a/src/community/docsLessons.jsx +++ b/src/community/docsLessons.jsx @@ -8260,14 +8260,16 @@ game.placement.onCancel(() => game.ui.set('hint', '', {}));`} <>

Что получится

- Игрок стоит в гараже рядом с жёлтым такси. Кликнул по - такси → весь экран плавно затемняется, в центре — снимок - сцены, под ним жёлтый прогресс-бар заполняется за 4 секунды, - крупно процент, кнопка «Пропустить» и спиннер - «Загрузка». Через 4 секунды экран исчезает — игрок уже - в городе, небо стало закатным. Это та самая «загрузка между - мирами», которую в больших играх показывают при телепорте на новый - уровень (Taxi Boss, Brookhaven, Jailbreak). + Три локации в одном проекте, между ними — красивая загрузка. + Игрок в гараже у жёлтого такси жмёт «Поехать в город» → весь + экран плавно затемняется, в центре снимок сцены, жёлтый + прогресс-бар заполняется за 4 секунды, крупно процент, + кнопка «Пропустить» и спиннер «Загрузка». Через 4 секунды + экран исчезает — игрок уже в городе с высотками и закатным небом. + В городе кнопка «Магазин» делает короткий переход внутрь + закрытого магазина (ряды стеллажей, кассы), а «Назад» возвращает на + улицу. Это та самая «загрузка между мирами» из больших игр (Taxi Boss, + Brookhaven, Jailbreak) — несколько миров без отдельных «уровней».

game.ui.set('hint', '', {}));`} в этой игре берёт их сам — не повторяешь стиль в каждом вызове.

-

Шаг 2. Клик по такси → переход в город

+

Шаг 2. Кнопка «Поехать» → переход в город

- На самом такси висит маленький скрипт. game.self.onClick — - клик именно по этому объекту. Внутри — await - game.loading.transition(...): код «замирает», пока крутится + Делаем кнопку и вешаем на неё переход. await + game.loading.transition(...) «замораживает» код, пока крутится загрузка, и продолжается, когда она закончилась (или игрок нажал - «Пропустить»). + «Пропустить»). После — телепорт и смена окружения: игрок «оказался» в + новом мире.

- - {`game.self.onClick(async () => { + + {`game.gui.create('button', { + id: 'btn_go', x: 50, y: 92, w: 26, h: 9, anchor: 'center', + text: 'Поехать в город', textColor: '#3a2a00', textSize: 20, fontWeight: 800, + bgGradient: { stops: ['#ffd23a', '#e0a000'], angle: 90 }, borderRadius: 12, +}); +game.gui.onClick('btn_go', async () => { + game.gui.remove('btn_go'); await game.loading.transition({ cover: { sceneSnapshot: true }, // снимок текущей сцены как картинка duration: 4, // бар заполняется 4 секунды @@ -8320,8 +8328,11 @@ game.placement.onCancel(() => game.ui.set('hint', '', {}));`} game.scene.environment = 'sunset'; // закатное небо });`} - transition — это «фейковый» прогресс на заданное время - (для красивого перехода). Для реальной загрузки ресурсов есть + transition — «фейковый» прогресс на заданное время (для + красивого перехода). Точно так же сделана кнопка «Магазин»: + переход 1.5с → teleport внутрь закрытого + зала-магазина (отдельная локация со стеллажами и кассами) → кнопка + «Назад» возвращает в город. Для реальной загрузки ресурсов есть show + setProgress — см. Шаг 3. @@ -8345,23 +8356,26 @@ const step = () => { step();`} + caption="Город изнутри: перекрёсток с высотками по обеим сторонам и Макдональдс в конце улицы — одна из трёх локаций проекта (гараж · город · интерьер магазина)." />

Почему это удобно

- Один проект — несколько миров (гараж, город, магазин), а - переключение между ними прячется за красивым экраном загрузки. - Игрок не видит «телепорт рывком» — видит плавную загрузку, как в - больших играх. А await делает код линейным: «показать - загрузку → дождаться → продолжить». + Один проект — три мира (гараж · город · интерьер магазина), + собранные в разных углах сцены, а переключение между ними прячется за + красивым экраном загрузки. Игрок не видит «телепорт рывком» — видит + плавную загрузку, как в больших играх. А await делает код + линейным: «показать загрузку → дождаться → телепортировать → сменить + небо». Так из одного проекта получается целая игра с локациями, без + отдельных уровней-файлов.

- В городе есть кнопка «Магазин» — она делает короткий переход - (1.5с) к зданию-магазину. Сделай по аналогии ещё одну точку: кнопку - «Гараж», которая через loading.transition на 1 секунду - возвращает игрока к такси (teleport(0, 2, 0)) и ставит - дневное небо (environment = 'day'). + Добавь четвёртую локацию — например «парк». Поставь её в ещё + одном углу сцены (скажем, x = -100), сделай кнопку «В парк» + и переход на неё через loading.transition (свой текст и + duration). Не забудь кнопку «Назад», которая возвращает в + город. Подсказка: каждый переход = await transition → + teleport(...)environment = '...'. ),