feat: 50 игр на Lua + импорт Roblox для всех + поддержка Lua в плеере #39
@ -1013,35 +1013,55 @@ game.self.onUntouch(() => {
|
||||
<>
|
||||
<p>
|
||||
Нарисованная кнопка сама по себе ничего не делает —
|
||||
нужен скрипт. Самый простой способ — повесить скрипт
|
||||
прямо на кнопку.
|
||||
нужен скрипт.
|
||||
</p>
|
||||
<ScriptKind kind="object" on="кнопку" />
|
||||
<Code>{`// Скрипт висит на кнопке.
|
||||
<LangTabs
|
||||
js={<Code>{`// Скрипт висит на кнопке.
|
||||
// game.self — это сама кнопка.
|
||||
game.self.onClick(() => {
|
||||
game.ui.showText('Кнопка нажата!', 2);
|
||||
game.sound.play('click');
|
||||
});`}</Code>
|
||||
<p>
|
||||
Можно и наоборот — управлять кнопкой из глобального
|
||||
скрипта, если найти её по имени:
|
||||
</p>
|
||||
});`}</Code>}
|
||||
lua={<Code>{`-- Скрипт висит на кнопке (TextButton)
|
||||
-- script.Parent — это сама кнопка.
|
||||
local btn = script.Parent
|
||||
|
||||
btn.MouseButton1Click:Connect(function()
|
||||
print("Кнопка нажата!")
|
||||
end)`}</Code>}
|
||||
/>
|
||||
<p>Можно и наоборот — управлять кнопкой из глобального скрипта:</p>
|
||||
<ScriptKind kind="global" />
|
||||
<Code>{`// Находим кнопку по имени и вешаем на неё клик
|
||||
<LangTabs
|
||||
js={<Code>{`// Находим кнопку по имени и вешаем на неё клик
|
||||
const btnId = game.gui.find('Кнопка старта');
|
||||
|
||||
game.gui.onClick(btnId, () => {
|
||||
game.ui.showText('Игра началась!', 2);
|
||||
// спрятать кнопку после нажатия
|
||||
game.gui.hide(btnId);
|
||||
});`}</Code>
|
||||
game.gui.hide(btnId); // спрятать кнопку после нажатия
|
||||
});`}</Code>}
|
||||
lua={<Code>{`local Players = game:GetService("Players")
|
||||
local player = Players.LocalPlayer
|
||||
local gui = player:WaitForChild("PlayerGui")
|
||||
|
||||
-- Находим кнопку по имени (она лежит где-то в PlayerGui)
|
||||
local btn = gui:FindFirstChild("Кнопка старта", true)
|
||||
|
||||
btn.MouseButton1Click:Connect(function()
|
||||
print("Игра началась!")
|
||||
btn.Visible = false -- спрятать кнопку
|
||||
end)`}</Code>}
|
||||
/>
|
||||
<p>
|
||||
Что тут происходит: <code>game.gui.find</code> ищет
|
||||
элемент по имени и возвращает его id («адрес»).
|
||||
<code> game.gui.onClick</code> вешает на этот id действие.
|
||||
<code> game.gui.hide</code> прячет кнопку, чтобы её нельзя
|
||||
было нажать второй раз.
|
||||
JS: <code>game.gui.find</code> ищет элемент по имени.
|
||||
<code> game.gui.onClick</code> вешает действие, <code>game.gui.hide</code> прячет.
|
||||
</p>
|
||||
<p>
|
||||
Lua: <code>gui:FindFirstChild(name, true)</code> ищет рекурсивно
|
||||
(третий аргумент <code>true</code> = во вложенных).
|
||||
<code> MouseButton1Click</code> — стандартный сигнал клика на TextButton.
|
||||
<code> btn.Visible = false</code> прячет элемент.
|
||||
</p>
|
||||
</>
|
||||
),
|
||||
@ -1053,34 +1073,59 @@ game.gui.onClick(btnId, () => {
|
||||
<>
|
||||
<p>
|
||||
<b>Поле ввода</b> позволяет игроку напечатать ответ.
|
||||
Когда он нажмёт Enter, срабатывает событие
|
||||
<code> onSubmit</code> — и скрипт получает введённый текст.
|
||||
Когда он нажмёт Enter, скрипт получает введённый текст.
|
||||
</p>
|
||||
<ScriptKind kind="global" />
|
||||
<Code>{`// Игрок вводит код. Правильный код — 1234.
|
||||
<LangTabs
|
||||
js={<Code>{`// Игрок вводит код. Правильный код — 1234.
|
||||
const boxId = game.gui.find('Поле кода');
|
||||
|
||||
game.gui.onSubmit(boxId, (text) => {
|
||||
if (text === '1234') {
|
||||
game.ui.showText('Верно! Дверь открыта', 2);
|
||||
// двигаем дверь вверх, чтобы освободить проход
|
||||
const door = game.scene.findOne('Дверь');
|
||||
game.tween(door, { y: 8 }, { duration: 1 });
|
||||
} else {
|
||||
game.ui.showText('Неверный код', 1.5);
|
||||
}
|
||||
});`}</Code>
|
||||
});`}</Code>}
|
||||
lua={<Code>{`local Players = game:GetService("Players")
|
||||
local TweenService = game:GetService("TweenService")
|
||||
local player = Players.LocalPlayer
|
||||
local gui = player:WaitForChild("PlayerGui")
|
||||
|
||||
-- Находим TextBox по имени
|
||||
local box = gui:FindFirstChild("Поле кода", true)
|
||||
|
||||
-- FocusLost срабатывает когда игрок нажал Enter или ушёл с поля.
|
||||
-- Первый параметр enterPressed = true только если был Enter.
|
||||
box.FocusLost:Connect(function(enterPressed)
|
||||
if not enterPressed then return end
|
||||
|
||||
if box.Text == "1234" then
|
||||
print("Верно! Дверь открыта")
|
||||
local door = workspace:WaitForChild("Дверь")
|
||||
local goal = { Position = door.Position + Vector3.new(0, 8, 0) }
|
||||
TweenService:Create(door, TweenInfo.new(1), goal):Play()
|
||||
else
|
||||
print("Неверный код")
|
||||
end
|
||||
end)`}</Code>}
|
||||
/>
|
||||
<p>
|
||||
Разберём построчно: <code>onSubmit</code> даёт переменную
|
||||
<code> text</code> — это то, что напечатал игрок.
|
||||
<code> if (text === '1234')</code> — проверяем, совпал ли
|
||||
код. Если да — открываем дверь твином (плавно поднимаем).
|
||||
Если нет — пишем «Неверный код».
|
||||
JS-разбор: <code>onSubmit</code> даёт переменную
|
||||
<code> text</code> — то, что напечатал игрок.
|
||||
<code> if (text === '1234')</code> — проверяем код.
|
||||
</p>
|
||||
<p>
|
||||
Lua-разбор: на TextBox сигнал <code>FocusLost</code>
|
||||
срабатывает когда поле теряет фокус (Enter или клик мимо).
|
||||
Текст лежит в <code>box.Text</code>.
|
||||
</p>
|
||||
<Note>
|
||||
Две одинарные кавычки <code>'1234'</code> означают,
|
||||
что это <b>текст</b>, а не число. Игрок печатает в поле
|
||||
всегда текст, поэтому и сравнивать нужно с текстом.
|
||||
Кавычки <code>"1234"</code> означают, что это
|
||||
<b> текст</b>, а не число. Игрок печатает в поле всегда
|
||||
текст, поэтому и сравнивать нужно с текстом.
|
||||
</Note>
|
||||
</>
|
||||
),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user