Menu
CoddyTech

واحدة تلو الأخرى

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

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

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

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

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

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

عندما يصل العدد إلى Settings.RoomsToEscape (10)، تكون الغرفة هي القالب Exit، وبابها أخضر. في الوقت الحالي، يُفتح الباب كأي باب آخر؛ أما الفصل 4 فيجعله المخرج.

challenge icon

التحدي

متوسط

أنشئ غرفة جديدة خلف كل باب تفتحه.

  1. أعلن local addRoom فوق setupDoor واكتبها أدناه بصيغة function addRoom(). أزل استدعاء addRoom() في النهاية.
  2. في setupDoor، قبل فتح الباب: إذا كان door.Parent == lastRoom، فاستدعِ addRoom().
  3. في addRoom، استخدم القالب "Exit" عندما يصبح count >= Settings.RoomsToEscape.

اضغط «العب» وافتح ثلاثة أبواب: تنتظرك غرفة جديدة خلف كل باب. ثم اضغط «تحقق».

جرّب بنفسك

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
		-- الدرس 5: يأتي هنا جزء واحدًا تلو الآخر
		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)

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

تدرّب بنفسك: Playground لـ Roblox