From ef29c114734a9bf799310984ef951cefb74e13b7 Mon Sep 17 00:00:00 2001
From: min
- Игрок стоит в гараже рядом с жёлтым такси. Кликнул по
- такси → весь экран плавно затемняется, в центре — снимок
- сцены, под ним жёлтый прогресс-бар заполняется за 4 секунды,
- крупно процент, кнопка «Пропустить» и спиннер
- «Загрузка». Через 4 секунды экран исчезает — игрок уже
- в городе, небо стало закатным. Это та самая «загрузка между
- мирами», которую в больших играх показывают при телепорте на новый
- уровень (Taxi Boss, Brookhaven, Jailbreak).
+ Три локации в одном проекте, между ними — красивая загрузка.
+ Игрок в гараже у жёлтого такси жмёт «Поехать в город» → весь
+ экран плавно затемняется, в центре снимок сцены, жёлтый
+ прогресс-бар заполняется за 4 секунды, крупно процент,
+ кнопка «Пропустить» и спиннер «Загрузка». Через 4 секунды
+ экран исчезает — игрок уже в городе с высотками и закатным небом.
+ В городе кнопка «Магазин» делает короткий переход внутрь
+ закрытого магазина (ряды стеллажей, кассы), а «Назад» возвращает на
+ улицу. Это та самая «загрузка между мирами» из больших игр (Taxi Boss,
+ Brookhaven, Jailbreak) — несколько миров без отдельных «уровней».
Что получится
- На самом такси висит маленький скрипт. 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.
- Один проект — несколько миров (гараж, город, магазин), а
- переключение между ними прячется за красивым экраном загрузки.
- Игрок не видит «телепорт рывком» — видит плавную загрузку, как в
- больших играх. А await делает код линейным: «показать
- загрузку → дождаться → продолжить».
+ Один проект — три мира (гараж · город · интерьер магазина),
+ собранные в разных углах сцены, а переключение между ними прячется за
+ красивым экраном загрузки. Игрок не видит «телепорт рывком» — видит
+ плавную загрузку, как в больших играх. А await делает код
+ линейным: «показать загрузку → дождаться → телепортировать → сменить
+ небо». Так из одного проекта получается целая игра с локациями, без
+ отдельных уровней-файлов.
loading.transition на 1 секунду
- возвращает игрока к такси (teleport(0, 2, 0)) и ставит
- дневное небо (environment = 'day').
+ Добавь четвёртую локацию — например «парк». Поставь её в ещё
+ одном углу сцены (скажем, x = -100), сделай кнопку «В парк»
+ и переход на неё через loading.transition (свой текст и
+ duration). Не забудь кнопку «Назад», которая возвращает в
+ город. Подсказка: каждый переход = await transition →
+ teleport(...) → environment = '...'.