Roblox Prosedürel Zindan Üretimi: BSP Odaları, Delaunay Koridorları & Streaming

2026-09-29 • DopaBrain Roblox Procedural Architecture Team • DopaBrain Engineering

Featured DopaBrain Interactive Tools

Prosedürel harita üretimi, Roblox'taki roguelike ve zindan RPG oyunlarının omurgasıdır. Zayıf mimariler bellek taşmalarına ve harita çakışmalarına neden olur.

Oda yerleşimi için BSP, doğal koridorlar için Delaunay üçgenlemesi ve performans için `StreamingEnabled` kullanarak devasa ve hafif zindanlar inşa edebilirsiniz.

1. Binary Space Partitioning (BSP) ile Çakışmasız Odalar

Haritanın orantılı bölünmesi için matematiksel algoritma:

2. Doğal Koridorlar: Delaunay Üçgenlemesi & Minimum Spanning Tree (MST)

Kör nokta bırakmadan organik geçiş hatları oluşturma:

3. Izgara Tabanlı Koridor Açma ve Modüler Parça Montajı

Grafiksel verilerin Roblox fiziksel parçalarına dönüştürülmesi:

ServerScriptService.Dungeon.BSPGenerator
-- BSP Düğüm Bölme Modülü
local BSPNode = {}
BSPNode.__index = BSPNode

function BSPNode.new(x, z, width, depth)
    local self = setmetatable({}, BSPNode)
    self.X, self.Z = x, z
    self.Width, self.Depth = width, depth
    self.LeftChild = nil
    self.RightChild = nil
    self.Room = nil
    return self
end

function BSPNode:Split(minSize)
    if self.LeftChild or self.RightChild then return false end
    local splitHorizontal = math.random() > 0.5
    if self.Width > self.Depth and (self.Width / self.Depth) >= 1.25 then
        splitHorizontal = false
    elseif self.Depth > self.Width and (self.Depth / self.Width) >= 1.25 then
        splitHorizontal = true
    end
    local maxDimension = (splitHorizontal and self.Depth or self.Width) - minSize
    if maxDimension <= minSize then return false end
    local splitPos = math.random(minSize, maxDimension)
    if splitHorizontal then
        self.LeftChild = BSPNode.new(self.X, self.Z, self.Width, splitPos)
        self.RightChild = BSPNode.new(self.X, self.Z + splitPos, self.Width, self.Depth - splitPos)
    else
        self.LeftChild = BSPNode.new(self.X, self.Z, splitPos, self.Depth)
        self.RightChild = BSPNode.new(self.X + splitPos, self.Z, self.Width - splitPos, self.Depth)
    end
    return true
end

return BSPNode

4. Bellek Yönetimi ve StreamingEnabled Mimarisi

100'den fazla odası olan zindanları 2GB RAM'li cihazlarda akıcı çalıştırma:

5. Tohum (Seed) Eşitleme ve Sunucu Otoritesi

Ağ gecikmesi olmadan hilesiz ve senkronize haritalar:

Frequently Asked Questions

Rastgele yerleşim yerine neden BSP kullanılmalıdır?

Rastgele yerleşim oda çakışmalarına ve boşluklara yol açar. BSP alanı dengeli böler ve çakışmayı matematiksel olarak önler.

Delaunay ve MST ikilisinin görevi nedir?

Delaunay komşu yolları bulur, MST ise hiçbir odayı izole bırakmadan en kısa koridor ağını inşa eder.

StreamingEnabled zindanlarda nasıl performans sağlar?

Yalnızca oyuncunun yakınındaki odaları belleğe alıp uzaktakileri kaldırarak mobil cihazlarda RAM tasarrufu sağlar.

Haritanın herkes için aynı olması nasıl sağlanır?

Sunucu ve istemci aynı rastgele tohum değerini paylaşır, böylece harita veri aktarımı olmadan yerel olarak üretilir.

Explore More Interactive Tests & Guides

Discover personalized cognitive assessments, stress evaluations, and game psychology tools on DopaBrain.

Go to Portal Hub