Menu
CoddyTech

Thu thập xu

Thuộc phần Lập trình game Roblox trong hành trình Lua của Coddy. Bài học 15 trên 25.

Miếng đệm báu vật đặt set Coins thành 100. Một đồng xu sẽ add thêm 1, và điều đó tạo ra một vấn đề mới.

Touched kích hoạt một lần cho mỗi bộ phận cơ thể chạm vào, nên một bước đi lên đồng xu có thể kích hoạt nhiều lần. Mỗi lần thêm 1 điểm thì một đồng xu sẽ cho nhiều điểm.

Cách khắc phục là dùng debounce: một biến ghi nhớ “việc này đã xảy ra rồi” và khiến code bỏ qua các lần lặp lại:

local used = false
button.Touched:Connect(function(hit)
	if not used then
		used = true
		print("Pressed!")
	end
end)

not used là true khi used là false, nên chỉ lần chạm đầu tiên mới vượt qua if not used. a and b chỉ là true khi cả hai đều true: if player and not used then yêu cầu có người chơi và nút chưa được dùng.

Khi một vòng lặp kết nối nhiều bộ phận, hãy tạo biến bên trong vòng lặp để mỗi bộ phận có biến riêng. value += 1 là cách viết ngắn của value = value + 1.

challenge icon

Thử thách

Trung bình

Để mỗi đồng xu chỉ cho đúng 1 Coin: hiện tại, đi qua một đồng xu sẽ nhận được nhiều Coin.

  1. Bên trong vòng lặp for, trước Connect, thêm local collected = false.
  2. Đổi điều kiện kiểm tra thành if player and not collected then.
  3. Đặt collected = true làm dòng đầu tiên bên trong điều kiện đó.

Nhấn Chơi rồi đi qua một đồng xu: Coins tăng đúng 1. Sau đó nhấn Kiểm tra.

Tự làm thử

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

Tất cả bài học trong Lập trình game Roblox

Tự luyện tập: Trình biên dịch Lua online