Menu
CoddyTech

Повторное появление монеты

Часть раздела Скриптинг игр в Roblox путешествия по Lua на Coddy. Урок 16 из 25.

Теперь каждая монета даёт 1 очко один раз. Настоящая монета должна исчезнуть, а затем появиться снова, чтобы её можно было собрать ещё раз.

Transparency = 1 скрывает деталь, но она по-прежнему вызывает событие Touched. CanTouch = false отключает вызов события Touched для детали, пока значение не будет снова установлено в true.

Чтобы вернуть её, подожди внутри функции Touched и отмени изменения. task.wait приостанавливает только эту функцию, поэтому другие касания продолжают поступать и игнорируются, пока состояние защиты от повторного срабатывания равно true:

local used = false
pad.Touched:Connect(function(hit)
	if not used then
		used = true
		pad.Transparency = 0.5
		task.wait(5)
		pad.Transparency = 0
		used = false
	end
end)

После касания площадка становится полупрозрачной на 5 секунд, а затем возвращается в исходное состояние и снова готова к использованию.

challenge icon

Задание

Средне

Сделай так, чтобы собранная монета исчезала, а через 3 секунды возвращалась.

  1. После строки, которая добавляет монету, скрой её: coin.Transparency = 1 и coin.CanTouch = false.
  2. Затем подожди task.wait(3) и снова покажи её: Transparency 0, CanTouch true.
  3. Наконец, установи collected = false, чтобы монету можно было собрать снова.

Нажми «Играть» и пройди сквозь монету: она исчезнет и вернётся через 3 секунды. Затем нажми «Проверить».

Попробуйте сами

local Players = game:GetService("Players")
local coins = workspace.Coins

Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local coinsValue = Instance.new("IntValue")
	coinsValue.Name = "Coins"
	coinsValue.Value = 0
	coinsValue.Parent = leaderstats
end)

for _, coin in coins:GetChildren() do
	local collected = false
	coin.Touched:Connect(function(hit)
		local player = Players:GetPlayerFromCharacter(hit.Parent)
		if player and not collected then
			collected = true
			player.leaderstats.Coins.Value += 1
		end
	end)
end

Все уроки раздела Скриптинг игр в Roblox

Потренируйтесь самостоятельно: Онлайн-компилятор Lua