VoiclessCry

Yeni üye
8 Şub 2021
135
2
0
(16) Bursa
Tasarladığım bir envanter sistemim var ve bunda drag&drop kullanmaya çalıştım. Drag kısmını buton üzerinde bir image den yaptığım için sorun olmadı fakat drop işlemini butonlar üzerinde yapmam gerekiyor - normalde On Drop ile işlemi yazdım fakat envanterim tam bir bütün olduğu için 'drop on' komutu çokda bir işe yaramıyor envanterin tamamına drop on işlemi uygulamaya çalışıyor- şöyle anlatayım aklımdaki planı; her slot için on hovered koyup her on hovered a bi integer index i atayıp drag kısmını uyguladığım anda butondaki indexi alıp ve o indexin içindeki  buton infosunu da alıp bunları eş zamanlı olarak hafızada tutuyor sonrasında droplama işlemi içinde on drop çalışırken on hovered ile yeni buton indexini alacaktım. fakat drag&drop esnasında button on hovered işlemi yapmıyor dolayısıyla yeni indexi alamıyorum...

Bana bi çözüm veya alternatif bulabilecek varmı veya bi yerde hata mı yapıyorum.
 
Normalde OnDragDetected i çalıştırmayı başardıysan orada bir CreateDragDropOperation kullanarak yeni bir DragDropOperations yaratman lazım. Her DragDropOperation bir payload ile beraber gelir. Buna sen türkçe de yük diye bilirsin. Bu yük istediğin herşey olabilir. Bir envanter için mesela kılıç, potion, silah ne istersen onu koyabilirsin. Bu payload u OnDrop ta çekip cast edeceksin sadece. Orada ne istiyorsan onunla yapacaksın. Hatta yanında DefaultDragVisual da geliyor. Burayada bir resim koyabilirsin mouse un ucunda gözükecek (sürüklerken mouse ucunda bir silah resmi gözüksün vb.). Kendi DragDropOperation ınını da oluşturabilirsin. Eğer sürüklerken özel başka şeyler yapmasını istiyorsan sana özel bir dragdropoperation yaratıp onun OnDrag eventine ne istersen onu bağlayabilirsin. Benim yaptığımdan bir örnek burada:


Burada kendi custom DragDropOperation ıma  ( adı  BP Illuvial Drag Drop )kendi yarattığım bir actor ü koyuyorum. Diğer tarafata da bunu alacağım drop olduğu yerde. Yani taşıyabileceklerinin sınırı yok. Tüm envanteri aldığı için demişsin onu anlayamadım o yüzden.

Drop olayının button üzerinde algılanmaması ise button kullanmayabilirsin. İmage ile de mesela button şekli oluşturup button olmamasını sağlayabilirsin. Bunun haricinde buttonun üst hiyerarşisine başka bir şey koyup input önceliğini ona verebilirsin. Ama sorun şurdan kaynaklanır. Button üzerine birşey bırakılmak için dizayn edilmemiştir. Büyük ihtimalle başka bir widget kullanman gerekiyordur. Böyle daha kolay olur.
Kolay gelsin.
 
Buton olayını anlattığın için sağol diğer drag işlemlerini zaten senin söylediğin şekilde yapmıştım, buton kullanmayabilirim fakat envanteri temelinde 42 butonun üzerine yaptığım için şu noktada butonları değiştirmek çok kullanışlı olmaz o yüzden bir alternatif arıyordum kendime ama dediğin hiyerarşi de üstüne başka bişey atıp ona input önceliği vermesi mevzusunu overlay veya size box da oluyorsa onlarla yapabilirim fakat gördüğüm kadarıyla onlara da event atılmıyor. öyle birşey olmalı ki hem on drop da çalışmalı hemde butonu içine alabilmeli ve butonun önüne binip onun tıklanması vs yi kapatmamalı.. Tavsiyen varsa dinlemeye açığım ama şu durumda hiçbirşey bulamasam bile drag drop u iptal ederim daha mantıklı olur ._.

On Drop
https://pasteboard.co/JOai6MU.png

On Drag Detected
https://pasteboard.co/JOaiksS.png

--
https://pasteboard.co/JOaizmT.png
 
Buttonları değiştirmen uzun vadede en mantıklısı olur ama şu linkte istediğin sorun değişik şekillerde aşılmış. Göz gezdirebilirsin. Bunun sebebi bir button a tıkladığımızda bunun tıklamamamı yoksa sürükleme başlangıcı mı olduğunu anlamanın mantık açısından da çok zor olması. Dolayısı ile değiştirebiliyorsan değiştirmek en iyisi. Değiştirmek istemiyorsan şu linkteki çözümler yardımcı olabilir.

https://answers.unrealengine.com/qu...utton-how-to-handle-dragdrop-functionali.html
 
Bu cevabınızı okuyunca olmaması çok mantıklı geldi drag detected da ilk başta aynı sorunu image den yapmama rağmen butona takıldığı için yaşamıştım ve mecburen drag i right click e almıştım .. Teşekkür ederim yardımlarınız için