Menu
CoddyTech
flag Ar iconالعربيةdown icon

واحدًا تلو الآخر

الدرس 5 من 20 في دورة لعبة Roblox: اهرب من الظلام على Coddy.

إنشاء غرفة واحدة في البداية يجعل اللعبة مكوّنة من غرفة واحدة. ينبغي أن تنشئ اللعبة غرفةً عند فتح باب: افتح باب أحدث غرفة، وستكون هناك غرفة جديدة خلفه.

يتطلب ذلك دالتين تحتاج كل منهما إلى الأخرى: تستدعي setupDoor الدالة addRoom، وتستدعي addRoom الدالة setupDoor. يجب التصريح عن المتغير المحلي قبل أن يتمكن الكود من استخدامه، لذا يُصرَّح عن addRoom أولًا ثم تُكتب لاحقًا:

local addRoom -- تم التصريح عنه هنا، وتعريفه أدناه

local function setupDoor(door)
	-- ... addRoom() ...
end

function addRoom()
	-- ... setupDoor(room.Door) ...
end

عندما يصل العدد إلى Settings.RoomsToEscape، تكون الغرفة هي القالب Exit: طريق الخروج.

challenge icon

التحدي

متوسط
  1. عرّف local addRoom قبل setupDoor، واكتبها بصيغة function addRoom().
  2. في setupDoor، قبل فتح الباب: إذا كان الباب ينتمي إلى lastRoom، فأضف غرفة.
  3. في addRoom، استخدم القالب Exit بمجرد أن تصل count إلى Settings.RoomsToEscape.
  4. أزِل استدعاء addRoom() في النهاية.

يحتوي عالم هذا الدرس على طريق خروج قصير (3 غرف). اضغط على Play، ثم Check.

جرّب بنفسك

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Lighting = game:GetService("Lighting")
local TweenService = game:GetService("TweenService")
local Settings = require(game.ReplicatedStorage.Settings)

local rooms = workspace.Rooms
local lastRoom = rooms.Lobby -- أحدث غرفة
local count = 0 -- الغرف التي أُنشئت حتى الآن

-- يحلّ الليل: لا شمس، وضوء خافت في كل مكان، وضباب
Lighting.ClockTime = Settings.ClockTime
Lighting.Ambient = Settings.Ambient
Lighting.OutdoorAmbient = Settings.Ambient
Lighting.FogColor = Color3.new(0, 0, 0)
Lighting.FogEnd = Settings.FogEnd
print("Lights out")

-- افتح الباب بتدويره على مفصلته
local function openDoor(door)
	door:SetAttribute("Open", true)
	door.Panel.Prompt.Enabled = false
	local hinge, panel = door.Hinge, door.Panel
	local goal = hinge.CFrame * CFrame.Angles(0, math.rad(90), 0) * hinge.CFrame:ToObjectSpace(panel.CFrame)
	TweenService:Create(panel, TweenInfo.new(0.6), { CFrame = goal }):Play()
end

-- ما يفعله الباب عندما يفتحه لاعب
local function setupDoor(door)
	door.Panel.Prompt.Triggered:Connect(function(player)
		if door:GetAttribute("Open") then
			return
		end
		openDoor(door)
	end)
end
setupDoor(workspace.Rooms.Lobby.Door)

-- غرفة جديدة عند مخرج أحدث غرفة
local function addRoom()
	count += 1
	local name = Settings.Order[(count - 1) % #Settings.Order + 1]
	local room = ServerStorage.Rooms[name]:Clone()
	room:PivotTo(lastRoom.Exit.CFrame)
	room.Parent = rooms
	lastRoom = room
	setupDoor(room.Door)
	return room
end

addRoom()

-- كل لاعب: مصباح يدوي في كل حياة
Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function()
		local flashlight = ServerStorage.Flashlight:Clone()
		flashlight.Parent = player.Backpack
		local beam = flashlight.Handle.Beam
		flashlight.Activated:Connect(function()
			beam.Enabled = not beam.Enabled
		end)
	end)
end)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس لعبة Roblox: اهرب من الظلام