feat(wiki): LangTabs в C3 и C4 (GUI оживление, поле ввода)
C3 кнопка: game.gui.onClick vs MouseButton1Click + PlayerGui:FindFirstChild C4 поле ввода: onSubmit vs FocusLost + box.Text C1, C2, C5 — без кода (общая теория), Picker сверху всё равно есть.
This commit is contained in:
parent
76fba9cb35
commit
e3bff777b2
@ -1013,35 +1013,55 @@ game.self.onUntouch(() => {
|
|||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
Нарисованная кнопка сама по себе ничего не делает —
|
Нарисованная кнопка сама по себе ничего не делает —
|
||||||
нужен скрипт. Самый простой способ — повесить скрипт
|
нужен скрипт.
|
||||||
прямо на кнопку.
|
|
||||||
</p>
|
</p>
|
||||||
<ScriptKind kind="object" on="кнопку" />
|
<ScriptKind kind="object" on="кнопку" />
|
||||||
<Code>{`// Скрипт висит на кнопке.
|
<LangTabs
|
||||||
|
js={<Code>{`// Скрипт висит на кнопке.
|
||||||
// game.self — это сама кнопка.
|
// game.self — это сама кнопка.
|
||||||
game.self.onClick(() => {
|
game.self.onClick(() => {
|
||||||
game.ui.showText('Кнопка нажата!', 2);
|
game.ui.showText('Кнопка нажата!', 2);
|
||||||
game.sound.play('click');
|
game.sound.play('click');
|
||||||
});`}</Code>
|
});`}</Code>}
|
||||||
<p>
|
lua={<Code>{`-- Скрипт висит на кнопке (TextButton)
|
||||||
Можно и наоборот — управлять кнопкой из глобального
|
-- script.Parent — это сама кнопка.
|
||||||
скрипта, если найти её по имени:
|
local btn = script.Parent
|
||||||
</p>
|
|
||||||
|
btn.MouseButton1Click:Connect(function()
|
||||||
|
print("Кнопка нажата!")
|
||||||
|
end)`}</Code>}
|
||||||
|
/>
|
||||||
|
<p>Можно и наоборот — управлять кнопкой из глобального скрипта:</p>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// Находим кнопку по имени и вешаем на неё клик
|
<LangTabs
|
||||||
|
js={<Code>{`// Находим кнопку по имени и вешаем на неё клик
|
||||||
const btnId = game.gui.find('Кнопка старта');
|
const btnId = game.gui.find('Кнопка старта');
|
||||||
|
|
||||||
game.gui.onClick(btnId, () => {
|
game.gui.onClick(btnId, () => {
|
||||||
game.ui.showText('Игра началась!', 2);
|
game.ui.showText('Игра началась!', 2);
|
||||||
// спрятать кнопку после нажатия
|
game.gui.hide(btnId); // спрятать кнопку после нажатия
|
||||||
game.gui.hide(btnId);
|
});`}</Code>}
|
||||||
});`}</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>
|
<p>
|
||||||
Что тут происходит: <code>game.gui.find</code> ищет
|
JS: <code>game.gui.find</code> ищет элемент по имени.
|
||||||
элемент по имени и возвращает его id («адрес»).
|
<code> game.gui.onClick</code> вешает действие, <code>game.gui.hide</code> прячет.
|
||||||
<code> game.gui.onClick</code> вешает на этот id действие.
|
</p>
|
||||||
<code> game.gui.hide</code> прячет кнопку, чтобы её нельзя
|
<p>
|
||||||
было нажать второй раз.
|
Lua: <code>gui:FindFirstChild(name, true)</code> ищет рекурсивно
|
||||||
|
(третий аргумент <code>true</code> = во вложенных).
|
||||||
|
<code> MouseButton1Click</code> — стандартный сигнал клика на TextButton.
|
||||||
|
<code> btn.Visible = false</code> прячет элемент.
|
||||||
</p>
|
</p>
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
@ -1053,34 +1073,59 @@ game.gui.onClick(btnId, () => {
|
|||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
<b>Поле ввода</b> позволяет игроку напечатать ответ.
|
<b>Поле ввода</b> позволяет игроку напечатать ответ.
|
||||||
Когда он нажмёт Enter, срабатывает событие
|
Когда он нажмёт Enter, скрипт получает введённый текст.
|
||||||
<code> onSubmit</code> — и скрипт получает введённый текст.
|
|
||||||
</p>
|
</p>
|
||||||
<ScriptKind kind="global" />
|
<ScriptKind kind="global" />
|
||||||
<Code>{`// Игрок вводит код. Правильный код — 1234.
|
<LangTabs
|
||||||
|
js={<Code>{`// Игрок вводит код. Правильный код — 1234.
|
||||||
const boxId = game.gui.find('Поле кода');
|
const boxId = game.gui.find('Поле кода');
|
||||||
|
|
||||||
game.gui.onSubmit(boxId, (text) => {
|
game.gui.onSubmit(boxId, (text) => {
|
||||||
if (text === '1234') {
|
if (text === '1234') {
|
||||||
game.ui.showText('Верно! Дверь открыта', 2);
|
game.ui.showText('Верно! Дверь открыта', 2);
|
||||||
// двигаем дверь вверх, чтобы освободить проход
|
|
||||||
const door = game.scene.findOne('Дверь');
|
const door = game.scene.findOne('Дверь');
|
||||||
game.tween(door, { y: 8 }, { duration: 1 });
|
game.tween(door, { y: 8 }, { duration: 1 });
|
||||||
} else {
|
} else {
|
||||||
game.ui.showText('Неверный код', 1.5);
|
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>
|
<p>
|
||||||
Разберём построчно: <code>onSubmit</code> даёт переменную
|
JS-разбор: <code>onSubmit</code> даёт переменную
|
||||||
<code> text</code> — это то, что напечатал игрок.
|
<code> text</code> — то, что напечатал игрок.
|
||||||
<code> if (text === '1234')</code> — проверяем, совпал ли
|
<code> if (text === '1234')</code> — проверяем код.
|
||||||
код. Если да — открываем дверь твином (плавно поднимаем).
|
</p>
|
||||||
Если нет — пишем «Неверный код».
|
<p>
|
||||||
|
Lua-разбор: на TextBox сигнал <code>FocusLost</code>
|
||||||
|
срабатывает когда поле теряет фокус (Enter или клик мимо).
|
||||||
|
Текст лежит в <code>box.Text</code>.
|
||||||
</p>
|
</p>
|
||||||
<Note>
|
<Note>
|
||||||
Две одинарные кавычки <code>'1234'</code> означают,
|
Кавычки <code>"1234"</code> означают, что это
|
||||||
что это <b>текст</b>, а не число. Игрок печатает в поле
|
<b> текст</b>, а не число. Игрок печатает в поле всегда
|
||||||
всегда текст, поэтому и сравнивать нужно с текстом.
|
текст, поэтому и сравнивать нужно с текстом.
|
||||||
</Note>
|
</Note>
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user