feat(wiki): добавил CodeBoth с Lua-параллелью к скриптам игр 1-8
Создан хелпер CodeBoth в docsLessons.jsx: оборачивает <Code> в
<LangTabs js={JS-код} lua={Lua-код из LUA_OVERRIDES}>. Юзер
переключает JS↔Lua вверху урока — код в статье меняется тоже.
Заменены 17 блоков <Code> в уроках игр 1-8 на <CodeBoth>:
- collect-coins (g1_main, g1_coin_1)
- platform-jump (g2_main, g2_finish)
- dont-fall (g3_main, g3_tile_1)
- button-door (g4_main, g4_button, g4_finish)
- maze (g5_main, g5_finish)
- color-tiles (g6_main, g6_tile_1)
- catch-falling (g7_main)
- run-to-finish (g8_main, g8_finish)
Для остальных игр (9-50) остался JS-only Code — заменим
по мере прохождения.
This commit is contained in:
parent
73bf9f5c34
commit
41e0f7b6a4
@ -1,5 +1,24 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Code, ScriptKind, Step, Note, Try, Shot } from './docsData';
|
import { Code, ScriptKind, Step, Note, Try, Shot } from './docsData';
|
||||||
|
import { LangTabs } from './docsLang';
|
||||||
|
import { LUA_OVERRIDES } from './docsGamesBuildersLua';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Хелпер: оборачивает JS-код в LangTabs с Lua-параллелью из LUA_OVERRIDES.
|
||||||
|
* <CodeBoth game="collect-coins" script="g1_main">{`// JS код...`}</CodeBoth>
|
||||||
|
* → если открыт JS — показывает JS код
|
||||||
|
* → если открыт Lua — показывает Lua-код из LUA_OVERRIDES[game][script]
|
||||||
|
*/
|
||||||
|
function CodeBoth({ game, script, children }) {
|
||||||
|
const luaCode = LUA_OVERRIDES[game]?.[script];
|
||||||
|
const luaResolved = typeof luaCode === 'function' ? luaCode({ id: script }) : luaCode;
|
||||||
|
return (
|
||||||
|
<LangTabs
|
||||||
|
js={<Code>{children}</Code>}
|
||||||
|
lua={luaResolved ? <Code lang="lua">{luaResolved}</Code> : null}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* docsLessons.jsx — тексты уроков для 50 мини-игр (раздел K вики).
|
* docsLessons.jsx — тексты уроков для 50 мини-игр (раздел K вики).
|
||||||
@ -104,7 +123,7 @@ export const LESSONS = {
|
|||||||
Главный скрипт считает монетки и проверяет победу.
|
Главный скрипт считает монетки и проверяет победу.
|
||||||
</p>
|
</p>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// === ИГРА «СОБЕРИ МОНЕТКИ» — главный скрипт ===
|
<CodeBoth game="collect-coins" script="g1_main">{`// === ИГРА «СОБЕРИ МОНЕТКИ» — главный скрипт ===
|
||||||
// Этот скрипт глобальный: считает собранные монетки и проверяет победу.
|
// Этот скрипт глобальный: считает собранные монетки и проверяет победу.
|
||||||
|
|
||||||
let score = 0; // сколько монеток собрано
|
let score = 0; // сколько монеток собрано
|
||||||
@ -131,7 +150,7 @@ game.onMessage('coin', () => {
|
|||||||
{ x: p.x, y: p.y + 3, z: p.z },
|
{ x: p.x, y: p.y + 3, z: p.z },
|
||||||
{ duration: 3, count: 3 });
|
{ duration: 3, count: 3 });
|
||||||
}
|
}
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>
|
<p>
|
||||||
Разберём построчно:
|
Разберём построчно:
|
||||||
</p>
|
</p>
|
||||||
@ -154,14 +173,14 @@ game.onMessage('coin', () => {
|
|||||||
касание и сообщает главному скрипту: меня собрали.
|
касание и сообщает главному скрипту: меня собрали.
|
||||||
</p>
|
</p>
|
||||||
<ScriptKind kind="object" on="каждую монетку" />
|
<ScriptKind kind="object" on="каждую монетку" />
|
||||||
<Code>{`// === Скрипт монетки ===
|
<CodeBoth game="collect-coins" script="g1_coin_1">{`// === Скрипт монетки ===
|
||||||
// game.self — это сама монетка, на которой висит скрипт.
|
// game.self — это сама монетка, на которой висит скрипт.
|
||||||
|
|
||||||
game.self.onTouch(() => {
|
game.self.onTouch(() => {
|
||||||
// игрок коснулся монетки — сообщаем главному скрипту
|
// игрок коснулся монетки — сообщаем главному скрипту
|
||||||
game.broadcast('coin');
|
game.broadcast('coin');
|
||||||
game.self.delete(); // монетка исчезает со сцены
|
game.self.delete(); // монетка исчезает со сцены
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>
|
<p>
|
||||||
Что происходит: <code>onTouch</code> срабатывает, когда
|
Что происходит: <code>onTouch</code> срабатывает, когда
|
||||||
игрок дотронулся до монетки. Внутри мы шлём
|
игрок дотронулся до монетки. Внутри мы шлём
|
||||||
@ -274,7 +293,7 @@ game.self.onTouch(() => {
|
|||||||
Главный скрипт следит за падением и обрабатывает победу.
|
Главный скрипт следит за падением и обрабатывает победу.
|
||||||
</p>
|
</p>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// === ИГРА «ПРЫГАЙ ПО ПЛАТФОРМАМ» — главный скрипт ===
|
<CodeBoth game="platform-jump" script="g2_main">{`// === ИГРА «ПРЫГАЙ ПО ПЛАТФОРМАМ» — главный скрипт ===
|
||||||
|
|
||||||
let won = false; // победа уже была?
|
let won = false; // победа уже была?
|
||||||
|
|
||||||
@ -304,7 +323,7 @@ game.onMessage('finish', () => {
|
|||||||
game.scene.spawnParticles('confetti',
|
game.scene.spawnParticles('confetti',
|
||||||
{ x: p.x, y: p.y + 3, z: p.z },
|
{ x: p.x, y: p.y + 3, z: p.z },
|
||||||
{ duration: 3, count: 3 });
|
{ duration: 3, count: 3 });
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>Что тут важно:</p>
|
<p>Что тут важно:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code>game.onTick(...)</code> — функция внутри
|
<li><code>game.onTick(...)</code> — функция внутри
|
||||||
@ -320,13 +339,13 @@ game.onMessage('finish', () => {
|
|||||||
|
|
||||||
<h3 className="lessonH">Шаг 4. Скрипт финиша</h3>
|
<h3 className="lessonH">Шаг 4. Скрипт финиша</h3>
|
||||||
<ScriptKind kind="object" on="зелёную финишную площадку" />
|
<ScriptKind kind="object" on="зелёную финишную площадку" />
|
||||||
<Code>{`// === Скрипт финиша ===
|
<CodeBoth game="platform-jump" script="g2_finish">{`// === Скрипт финиша ===
|
||||||
// Висит на невидимой зоне над зелёной площадкой.
|
// Висит на невидимой зоне над зелёной площадкой.
|
||||||
// Игрок встал на площадку — его тело внутри зоны — победа.
|
// Игрок встал на площадку — его тело внутри зоны — победа.
|
||||||
|
|
||||||
game.self.onTouch(() => {
|
game.self.onTouch(() => {
|
||||||
game.broadcast('finish'); // сообщаем главному скрипту о победе
|
game.broadcast('finish'); // сообщаем главному скрипту о победе
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>
|
<p>
|
||||||
Когда игрок касается финиша, скрипт шлёт
|
Когда игрок касается финиша, скрипт шлёт
|
||||||
<code> game.broadcast('finish')</code>. Главный скрипт ловит
|
<code> game.broadcast('finish')</code>. Главный скрипт ловит
|
||||||
@ -401,7 +420,7 @@ game.self.onTouch(() => {
|
|||||||
<h3 className="lessonH">Шаг 2. Главный скрипт</h3>
|
<h3 className="lessonH">Шаг 2. Главный скрипт</h3>
|
||||||
<p>Следит за падением и победой — как в уроке 2.</p>
|
<p>Следит за падением и победой — как в уроке 2.</p>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// === ИГРА «НЕ УПАДИ» — главный скрипт ===
|
<CodeBoth game="dont-fall" script="g3_main">{`// === ИГРА «НЕ УПАДИ» — главный скрипт ===
|
||||||
|
|
||||||
let won = false;
|
let won = false;
|
||||||
|
|
||||||
@ -428,7 +447,7 @@ game.onMessage('finish', () => {
|
|||||||
const p = game.player.position;
|
const p = game.player.position;
|
||||||
game.scene.spawnParticles('confetti',
|
game.scene.spawnParticles('confetti',
|
||||||
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
|
|
||||||
<h3 className="lessonH">Шаг 3. Скрипт исчезающей плитки</h3>
|
<h3 className="lessonH">Шаг 3. Скрипт исчезающей плитки</h3>
|
||||||
<p>
|
<p>
|
||||||
@ -436,7 +455,7 @@ game.onMessage('finish', () => {
|
|||||||
который убирает её через секунду после касания.
|
который убирает её через секунду после касания.
|
||||||
</p>
|
</p>
|
||||||
<ScriptKind kind="object" on="каждую плитку" />
|
<ScriptKind kind="object" on="каждую плитку" />
|
||||||
<Code>{`// === Скрипт исчезающей плитки ===
|
<CodeBoth game="dont-fall" script="g3_tile_1">{`// === Скрипт исчезающей плитки ===
|
||||||
|
|
||||||
let triggered = false; // плитка уже запущена на исчезновение?
|
let triggered = false; // плитка уже запущена на исчезновение?
|
||||||
|
|
||||||
@ -448,7 +467,7 @@ game.self.onTouch(() => {
|
|||||||
game.after(1.2, () => {
|
game.after(1.2, () => {
|
||||||
game.self.delete();
|
game.self.delete();
|
||||||
});
|
});
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>Разберём:</p>
|
<p>Разберём:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code>triggered</code> — флажок-защёлка. Игрок может
|
<li><code>triggered</code> — флажок-защёлка. Игрок может
|
||||||
@ -532,7 +551,7 @@ game.self.onTouch(() => {
|
|||||||
|
|
||||||
<h3 className="lessonH">Шаг 3. Главный скрипт</h3>
|
<h3 className="lessonH">Шаг 3. Главный скрипт</h3>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// === ИГРА «КНОПКА-ОТКРЫВАШКА» — главный скрипт ===
|
<CodeBoth game="button-door" script="g4_main">{`// === ИГРА «КНОПКА-ОТКРЫВАШКА» — главный скрипт ===
|
||||||
|
|
||||||
game.ui.showText('Подойди к красной кнопке и нажми E', 4);
|
game.ui.showText('Подойди к красной кнопке и нажми E', 4);
|
||||||
|
|
||||||
@ -544,7 +563,7 @@ game.onMessage('win', () => {
|
|||||||
const p = game.player.position;
|
const p = game.player.position;
|
||||||
game.scene.spawnParticles('confetti',
|
game.scene.spawnParticles('confetti',
|
||||||
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
|
|
||||||
<h3 className="lessonH">Шаг 4. Скрипт кнопки — главное</h3>
|
<h3 className="lessonH">Шаг 4. Скрипт кнопки — главное</h3>
|
||||||
<p>
|
<p>
|
||||||
@ -552,7 +571,7 @@ game.onMessage('win', () => {
|
|||||||
открывает дверь.
|
открывает дверь.
|
||||||
</p>
|
</p>
|
||||||
<ScriptKind kind="object" on="красную кнопку" />
|
<ScriptKind kind="object" on="красную кнопку" />
|
||||||
<Code>{`// === Скрипт кнопки ===
|
<CodeBoth game="button-door" script="g4_button">{`// === Скрипт кнопки ===
|
||||||
|
|
||||||
let opened = false;
|
let opened = false;
|
||||||
|
|
||||||
@ -570,7 +589,7 @@ game.self.onInteract(() => {
|
|||||||
}, {
|
}, {
|
||||||
text: 'Открыть дверь', // подсказка над кнопкой
|
text: 'Открыть дверь', // подсказка над кнопкой
|
||||||
distance: 4 // на сколько метров подойти
|
distance: 4 // на сколько метров подойти
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>Разберём:</p>
|
<p>Разберём:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code>game.self.onInteract(fn, опции)</code> — это
|
<li><code>game.self.onInteract(fn, опции)</code> — это
|
||||||
@ -592,10 +611,10 @@ game.self.onInteract(() => {
|
|||||||
|
|
||||||
<h3 className="lessonH">Шаг 5. Скрипт финиша и проверка</h3>
|
<h3 className="lessonH">Шаг 5. Скрипт финиша и проверка</h3>
|
||||||
<ScriptKind kind="object" on="зелёный финиш" />
|
<ScriptKind kind="object" on="зелёный финиш" />
|
||||||
<Code>{`// === Скрипт финиша ===
|
<CodeBoth game="button-door" script="g4_finish">{`// === Скрипт финиша ===
|
||||||
game.self.onTouch(() => {
|
game.self.onTouch(() => {
|
||||||
game.broadcast('win'); // сообщаем главному скрипту о победе
|
game.broadcast('win'); // сообщаем главному скрипту о победе
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>Запусти игру:</p>
|
<p>Запусти игру:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>подойди к кнопке — появится подсказка «Открыть дверь»;</li>
|
<li>подойди к кнопке — появится подсказка «Открыть дверь»;</li>
|
||||||
@ -688,7 +707,7 @@ game.self.onTouch(() => {
|
|||||||
<h3 className="lessonH">Шаг 5. Скрипты</h3>
|
<h3 className="lessonH">Шаг 5. Скрипты</h3>
|
||||||
<p>Скрипты совсем простые — лабиринт держится на постройке.</p>
|
<p>Скрипты совсем простые — лабиринт держится на постройке.</p>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// === ИГРА «ЛАБИРИНТ» — главный скрипт ===
|
<CodeBoth game="maze" script="g5_main">{`// === ИГРА «ЛАБИРИНТ» — главный скрипт ===
|
||||||
|
|
||||||
game.ui.showText('Найди выход из лабиринта!', 3);
|
game.ui.showText('Найди выход из лабиринта!', 3);
|
||||||
|
|
||||||
@ -700,12 +719,12 @@ game.onMessage('win', () => {
|
|||||||
const p = game.player.position;
|
const p = game.player.position;
|
||||||
game.scene.spawnParticles('confetti',
|
game.scene.spawnParticles('confetti',
|
||||||
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<ScriptKind kind="object" on="зелёный финиш" />
|
<ScriptKind kind="object" on="зелёный финиш" />
|
||||||
<Code>{`// === Скрипт финиша ===
|
<CodeBoth game="maze" script="g5_finish">{`// === Скрипт финиша ===
|
||||||
game.self.onTouch(() => {
|
game.self.onTouch(() => {
|
||||||
game.broadcast('win'); // сообщаем главному скрипту о победе
|
game.broadcast('win'); // сообщаем главному скрипту о победе
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
|
|
||||||
<h3 className="lessonH">Шаг 6. Проверка</h3>
|
<h3 className="lessonH">Шаг 6. Проверка</h3>
|
||||||
<ul>
|
<ul>
|
||||||
@ -764,7 +783,7 @@ game.self.onTouch(() => {
|
|||||||
|
|
||||||
<h3 className="lessonH">Шаг 2. Главный скрипт</h3>
|
<h3 className="lessonH">Шаг 2. Главный скрипт</h3>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// === ИГРА «ЦВЕТНЫЕ ПЛИТКИ» — главный скрипт ===
|
<CodeBoth game="color-tiles" script="g6_main">{`// === ИГРА «ЦВЕТНЫЕ ПЛИТКИ» — главный скрипт ===
|
||||||
|
|
||||||
let painted = 0; // сколько плиток раскрашено
|
let painted = 0; // сколько плиток раскрашено
|
||||||
const TOTAL = 36; // всего плиток (6×6)
|
const TOTAL = 36; // всего плиток (6×6)
|
||||||
@ -785,7 +804,7 @@ game.onMessage('paint', () => {
|
|||||||
game.scene.spawnParticles('confetti',
|
game.scene.spawnParticles('confetti',
|
||||||
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
||||||
}
|
}
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<Note>
|
<Note>
|
||||||
Замени число <code>36</code> на столько плиток, сколько
|
Замени число <code>36</code> на столько плиток, сколько
|
||||||
реально поставил. Если сетка 5×5 — будет 25.
|
реально поставил. Если сетка 5×5 — будет 25.
|
||||||
@ -793,7 +812,7 @@ game.onMessage('paint', () => {
|
|||||||
|
|
||||||
<h3 className="lessonH">Шаг 3. Скрипт плитки</h3>
|
<h3 className="lessonH">Шаг 3. Скрипт плитки</h3>
|
||||||
<ScriptKind kind="object" on="каждую плитку" />
|
<ScriptKind kind="object" on="каждую плитку" />
|
||||||
<Code>{`// === Скрипт цветной плитки ===
|
<CodeBoth game="color-tiles" script="g6_tile_1">{`// === Скрипт цветной плитки ===
|
||||||
|
|
||||||
let painted = false; // плитка уже раскрашена?
|
let painted = false; // плитка уже раскрашена?
|
||||||
|
|
||||||
@ -803,7 +822,7 @@ game.self.onTouch(() => {
|
|||||||
// меняем цвет плитки на ярко-зелёный
|
// меняем цвет плитки на ярко-зелёный
|
||||||
game.scene.setColor(game.self.ref, '#33dd55');
|
game.scene.setColor(game.self.ref, '#33dd55');
|
||||||
game.broadcast('paint'); // сообщаем главному скрипту о покраске
|
game.broadcast('paint'); // сообщаем главному скрипту о покраске
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>Главное здесь:</p>
|
<p>Главное здесь:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code>game.scene.setColor(ref, цвет)</code> — меняет
|
<li><code>game.scene.setColor(ref, цвет)</code> — меняет
|
||||||
@ -874,7 +893,7 @@ game.self.onTouch(() => {
|
|||||||
|
|
||||||
<h3 className="lessonH">Шаг 2. Главный скрипт</h3>
|
<h3 className="lessonH">Шаг 2. Главный скрипт</h3>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// === ИГРА «ПОЙМАЙ ПАДАЮЩЕЕ» — главный скрипт ===
|
<CodeBoth game="catch-falling" script="g7_main">{`// === ИГРА «ПОЙМАЙ ПАДАЮЩЕЕ» — главный скрипт ===
|
||||||
|
|
||||||
let score = 0;
|
let score = 0;
|
||||||
const GOAL = 15; // сколько кубов нужно поймать
|
const GOAL = 15; // сколько кубов нужно поймать
|
||||||
@ -922,7 +941,7 @@ game.onPlayerTouch((e) => {
|
|||||||
game.scene.spawnParticles('confetti',
|
game.scene.spawnParticles('confetti',
|
||||||
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
||||||
}
|
}
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>Разберём по частям:</p>
|
<p>Разберём по частям:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code>game.every(1.5, fn)</code> — каждые 1.5 секунды
|
<li><code>game.every(1.5, fn)</code> — каждые 1.5 секунды
|
||||||
@ -1005,7 +1024,7 @@ game.onPlayerTouch((e) => {
|
|||||||
|
|
||||||
<h3 className="lessonH">Шаг 2. Главный скрипт</h3>
|
<h3 className="lessonH">Шаг 2. Главный скрипт</h3>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// === ИГРА «БЕГИ К ФИНИШУ» — главный скрипт ===
|
<CodeBoth game="run-to-finish" script="g8_main">{`// === ИГРА «БЕГИ К ФИНИШУ» — главный скрипт ===
|
||||||
|
|
||||||
let finished = false;
|
let finished = false;
|
||||||
let time = 0; // прошло секунд
|
let time = 0; // прошло секунд
|
||||||
@ -1032,7 +1051,7 @@ game.onMessage('finish', () => {
|
|||||||
const p = game.player.position;
|
const p = game.player.position;
|
||||||
game.scene.spawnParticles('confetti',
|
game.scene.spawnParticles('confetti',
|
||||||
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
{ x: p.x, y: p.y + 3, z: p.z }, { duration: 3, count: 3 });
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
<p>Главное здесь — измерение времени:</p>
|
<p>Главное здесь — измерение времени:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><code>game.onTick((dt) => {'{...}'})</code> —
|
<li><code>game.onTick((dt) => {'{...}'})</code> —
|
||||||
@ -1048,10 +1067,10 @@ game.onMessage('finish', () => {
|
|||||||
|
|
||||||
<h3 className="lessonH">Шаг 3. Скрипт финиша</h3>
|
<h3 className="lessonH">Шаг 3. Скрипт финиша</h3>
|
||||||
<ScriptKind kind="object" on="зелёный финиш" />
|
<ScriptKind kind="object" on="зелёный финиш" />
|
||||||
<Code>{`// === Скрипт финиша ===
|
<CodeBoth game="run-to-finish" script="g8_finish">{`// === Скрипт финиша ===
|
||||||
game.self.onTouch(() => {
|
game.self.onTouch(() => {
|
||||||
game.broadcast('finish'); // сообщаем главному скрипту о финише
|
game.broadcast('finish'); // сообщаем главному скрипту о финише
|
||||||
});`}</Code>
|
});`}</CodeBoth>
|
||||||
|
|
||||||
<h3 className="lessonH">Шаг 4. Проверка</h3>
|
<h3 className="lessonH">Шаг 4. Проверка</h3>
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user