VGUI için Sürükle ve Bırak
Sürükle ve Bırak
Bu, çok az belgelendiği için bir sürükle ve bırak eğitimidir. Çok kolaydır, ihtiyacınız olan tek şey iki paneldir: bir alıcı (receiver) ve bir bırakılabilir (droppable) panel.
Nasıl Çalışır
Panel:Droppable( string name ) 1 argüman alır:
- Name - Bırakma işlemine izin vermek için alıcının adıyla eşleşmelidir
Panel:Receiver( string name, function callback, table menu = nil ) 3 argüman alır:
- Name - Bırakılabilir panellerle eşleşecek tanımlayıcı
- Callback - Sürükleme/bırakma gerçekleştiğinde çağrılan fonksiyon
- Menu Options - Sağ tıklama menüsü için string tablosu (isteğe bağlı)
Callback fonksiyonu şunları alır:
- self - Alıcı panel
- panels - Bırakılan panellerin tablosu
- dropped - Gerçekten bırakıldığında true, üzerine sürüklenirken false değerini alır
- menuIndex - Sağ tıklama menüsü kullanılıyorsa dizin (index)
- x,y - Alıcıya göre bırakma koordinatları
Aşağıdaki örnekte:
- Kırmızı panel yalnızca sağ çerçeveye bırakılabilir
- Yeşil panel her iki çerçeveye de bırakılabilir
- Bırakıldığında, paneller alıcı çerçevenin alt öğesi (child) olur
Basit Örnek
İşte tek yönlü ve çift yönlü sürükle ve bırakmayı gösteren eksiksiz bir örnek:
-- Yan yana iki çerçeve oluştur
local left_dframe = vgui.Create("DFrame")
local right_dframe = vgui.Create("DFrame")
local w, h = 200, 300
local screen_w, screen_h = ScrW(), ScrH()
local x = screen_w / 2 - w - 10
local y = screen_h / 2 - h / 2
left_dframe:SetSize(w, h)
right_dframe:SetSize(w, h)
left_dframe:SetPos(x, y)
right_dframe:SetPos(x + w + 20, y)
left_dframe:SetTitle("Kaynak")
right_dframe:SetTitle("Hedef")
left_dframe:MakePopup()
right_dframe:MakePopup()
local red = vgui.Create("DPanel", left_dframe)
local green = vgui.Create("DPanel", left_dframe)
red:SetSize(50, 50)
green:SetSize(50, 50)
red:SetPos(20, 50)
green:SetPos(20, 120)
red.Paint = function(s, w, h)
surface.SetDrawColor(120, 0, 0)
surface.DrawRect(0, 0, w, h)
draw.DrawText("Tek Yönlü", "DermaDefault", w / 2, h / 2, color_white, TEXT_ALIGN_CENTER)
end
green.Paint = function(s, w, h)
surface.SetDrawColor(0, 120, 0)
surface.DrawRect(0, 0, w, h)
draw.DrawText("Çift Yönlü", "DermaDefault", w / 2, h / 2, color_white, TEXT_ALIGN_CENTER)
end
-- Panelleri sürüklenebilir yap
red:Droppable("one-way")
green:Droppable("two-way")
-- Yalnızca sağ çerçevenin tek yönlü bırakmaları almasını sağla
right_dframe:Receiver("one-way", function(self, panels, dropped, _, x, y)
if dropped then
panels[1]:SetParent(self)
panels[1]:SetPos(x - 25, y - 25)
end
end)
-- Her iki çerçevenin de çift yönlü bırakmaları almasını sağla
right_dframe:Receiver("two-way", function(self, panels, dropped, _, x, y)
if dropped then
panels[1]:SetParent(self)
panels[1]:SetPos(x - 25, y - 25)
end
end)
left_dframe:Receiver("two-way", function(self, panels, dropped, _, x, y)
if dropped then
panels[1]:SetParent(self)
panels[1]:SetPos(x - 25, y - 25)
end
end)

Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord