코인 수집가
Coddy Lua 여정의 Roblox 게임 스크립팅 섹션에 포함된 레슨. 24개 중 15번째.
보물 패드는 Coins를 100으로 설정했습니다. 코인은 1을 더해야 하는데, 그러면 새로운 문제가 생깁니다.
Touched는 접촉하는 각 신체 부위마다 한 번씩 실행되므로, 코인 위에 한 발짝만 디뎌도 여러 번 실행될 수 있습니다. 매번 1점을 더하면 코인 하나로 여러 점을 얻게 됩니다.
해결 방법은 디바운스입니다. "이미 일어났음"을 기억해서 코드가 반복을 무시하도록 하는 변수입니다.
local used = false
button.Touched:Connect(function(hit)
if not used then
used = true
print("Pressed!")
end
end)not used는 used가 false일 때 true이므로, 첫 번째 접촉만 if not used를 통과합니다. a and b는 둘 다 true일 때만 true입니다. 따라서 if player and not used then은 플레이어가 있고 코인이 아직 사용되지 않은 상태여야 합니다.
나중에 다시 실행되도록 하려면 기다린 다음 초기화합니다. task.wait(3) 다음에 used = false를 실행합니다. 기다리는 동안 일시 중지되는 것은 이 함수뿐이므로, 다른 접촉은 계속 들어오지만 used가 true인 동안 무시됩니다.
value += 1은 value = value + 1의 축약형이며, CanTouch = false로 설정하면 다시 true로 설정할 때까지 파트에서 Touched가 실행되지 않습니다.
챌린지
중급leaderstats와 Touched 연결은 준비되었지만, Play를 누르고 동전을 통과해 보세요. Coins가 1보다 많이 증가합니다.
문제를 수정하고 동전 기능을 완성하세요.
- 동전 하나를 획득할 때마다 Coin이 정확히 1개씩 지급됩니다(동전마다 디바운스 적용).
- 획득한 동전은 숨겨집니다.
Transparency는1,CanTouch는false입니다. - 3초 후 다시 나타나며(
Transparency는0,CanTouch는true), 다시 획득할 수 있습니다.
직접 해보기
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
coin.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player then
player.leaderstats.Coins.Value += 1
end
end)
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Roblox 게임 스크립팅의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러