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)
ezgif-2-7f57a61ca1.gif

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