#lua #game-development #roblox
Вопрос:
Итак, у меня есть игра-головоломка roblox, над которой я уже некоторое время работаю, основанная на классической аркадной игре Q bert, где цель состоит в том, чтобы изменить все цвета кирпичей, избегая врагов и получая высокий балл, но я добавлю некоторые собственные функции, чтобы она не была такой повторяющейся, например, дополнительные задачи, такие как сбор ключей на платформах, чтобы открыть дверь на следующий уровень, и секреты, такие как алмаз, который редко появляется каждые 10 раундов, и сбор одного дает игроку дополнительный чувак и 10 миллионов очков.
Это как игра выглядит до сих пор https://streamable.com/na46cu вопрос у меня, как вы можете видеть, что цвет на самом деле меняются, но когда я прыгнул на нее еще раз она меняется обратно на первый цвет это изменения, которым в данном случае является зеленый, но я хочу остановиться на первый цвет и сделать так, что оно не изменится до тех пор, пока игрок прыгает на кирпич снова и позже в игре я хочу, чтобы он стал более сложным и головоломки, как игра пойдет в этом примере [https://www.youtube.com/watch?v=9eXJWiNXpOo][2] .
Я попробовал несколько вещей ,таких как добавление таймеров, отмен и даже отдельных сценариев, все вместе, ни один из которых до сих пор не работал для меня, и я, конечно, отправился на поиски вопроса от кого-то другого, у которого была аналогичная проблема, но до сих пор я изо всех сил пытался найти кого-то еще, у кого была та же проблема.
local module = {} --module for the modulescript and for loop is created
local CollectionService = game:GetService("CollectionService")
for _, part,brick in pairs (CollectionService:GetTagged("blocks"))
do
part.Touched:Connect(function(hit) --Part connects with the touched property to the function with the parameter hit
if (hit.Parent:FindFirstChild("Humanoid"))
then
part.BrickColor = BrickColor.new ("Bright green")
wait (2)
part.BrickColor = BrickColor.new ("Eggplant")
-- local sound = workspace.Sound -- use "local sound = workspace.Sound", if there is already a sound object in the workspace
--sound.SoundId = "rbxassetid://4797903038" --replace quoted text with whatever sound id you need to use
--sound:Play()
end
end)
end
-- end)
--end
return module
Я не лучший программист, но я знаю основы программирования, и я опробовал различные языки программирования, такие как Python и c , все из которых не так уж сложно понять, как только вы узнаете основы всего этого, но найти решение проблемы-это действительно сложная часть, а также исправление ошибок и устранение неполадок.
Я знаю, что мог бы попробовать простую систему отмены, но это все равно не решает проблему, и это только делает так, что код запускается только один раз и замедляет его.
Я повсюду спрашивал о решении этой проблемы, но так и не получил ответа на нее, поэтому я в кои-то веки примеряю старый добрый Stackoverflow, чтобы посмотреть, будет ли это то место, где я получу необходимую мне помощь.
Ответ №1:
это должно сработать, попробуйте
local module = {} --module for the modulescript and for loop is created
local CollectionService = game:GetService("CollectionService")
local DidParts = {} -- Initializing another table to check if the part is already in it
for _, part,brick in pairs(CollectionService:GetTagged("blocks")) do
part.Touched:Connect(function(hit) --Part connects with the touched property to the function with the parameter hit
if hit.Parent:FindFirstChild("Humanoid") then
if table.find(DidParts,part) then
return -- checking if the part isnt in the table if it is then return
end
part.BrickColor = BrickColor.new("Bright green")
wait(2)
part.BrickColor = BrickColor.new("Eggplant")
table.insert(DidParts,part) -- when all the code has finished insert it in the table
-- local sound = workspace.Sound -- use "local sound = workspace.Sound", if there is already a sound object in the workspace
--sound.SoundId = "rbxassetid://4797903038" --replace quoted text with whatever sound id you need to use
--sound:Play()
end
end)
end
-- end)
--end
return module