Исправляю свой сценарий цветового касания для моей игры-головоломки roblox

#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