Learn · concepts
ImGui Nedir? Dear ImGui Açıklandı
ImGui (Dear ImGui), C++ için anında modlu bir grafik kullanıcı arayüzü kütüphanesidir. Her karede menüleri çizerek, saklanan bir widget ağacı olmadan çalışır; oyun araçlarında ve yerel istemcilerde yaygın olarak kullanılır.
ImGui Nedir?
ImGui, Dear ImGui'nin kısaltmasıdır, C++ için küçük, anında modlu bir GUI kütüphanesidir. Widget nesnelerinin bir ağacını korumak yerine, her karede düz fonksiyon çağrıları aracılığıyla yeni bir menü çizer. Bu, kurulumunu hızlı ve mevcut bir oyunun render döngüsünün üzerine kolayca yerleştirmeyi sağlar; bu nedenle araçlar ve yerel istemciler düşük gecikmeli üst üste bindirmeler için onu kullanır.
Temel fikir "anında modluluktur": bir Düğme nesnesi oluşturmak ve saklamak yerine, "burada bir düğme çiz" diyen bir fonksiyonu çağırırsınız ve bu çağrı hem düğmeyi çizer hem de bu karede tıklanıp tıklanmadığını size bildirir.
Anında Modluluk Ne Anlama Gelir
ImGui arayüzü her karede yeniden oluşturur. Bir düğme nesnesi oluşturup saklamazsınız. "burada bir düğme çiz" diyen bir fonksiyonu çağırırsınız ve bu çağrı hem düğmeyi çizer hem de bu karede tıklanıp tıklanmadığını size bildirir.
Saklanan modlu bir araç seti tam tersi şekilde çalışır. Bellekte uzun ömürlü bir widget ağacı tutar ve durum değiştiğinde bu ağacı güncellersiniz. Anında modluluk, bu kalıcı yapıyı, kendi durumunuzun yanında yaşayan ve yukarıdan aşağıya okunan kodla takas eder.
Uygulama çerçeve döngüsünü çalıştırır
Oyun bir kare oluşturur ve bunu bir parçası olarak UI kodunu çağırır.
UI kodu çalışıyor
Menüyü tepeden alta oluşturmak için ImGui fonksiyonlarını çağırırsınız: butonlar, kaydırıcılar, onay kutuları.
ImGui çizim yapar ve tepki verir
Fonksiyonlar hem widget'ları oluşturur hem de bu çerçeveyle etkileşimde bulunulup bulunmadığını döndürür.
Kodunuz tepki veriyor
Dönüş değerlerini okuyup kendi durumunu güncelliyorsun, tıpkı bu karede butonun tıklanmasıyla
do_thing()fonksiyonunu çağırmak gibi.
Neden araçlar ve müşteriler onu tercih ediyor
ImGui, 3 boyutlu bir sahnenin üzerine yerleştirilen menüler için popülerdir. Bunun nedenleri pratik:
- Düşük gecikme süresi: programın zaten oluşturduğu bir çerçeveye bağlanır, böylece menü anında tepki verir.
- Az ekleme: bir pencere ve birkaç kontrol, yalnızca birkaç fonksiyon çağrısıdır. Herhangi bir düzen dosyası veya yönetilmesi gereken ayrı bir kullanıcı arayüzü iş parçacığı yoktur.
- Bağımsız: kütüphane az bağımlılığa sahiptir ve yaygın grafik arka uçlarına uyum sağlar, bu nedenle ağır bir çerçeve çekmez.
- Hata ayıklamaya uygun: bir yayın menüsünü oluşturan aynı çağrılar, geliştiricilerin bir özellik oluştururken kullandıkları geçici hata ayıklama panellerini de oluşturur
Anlık mod ve kalıcı mod
| Yön | Anında Mod (ImGui) | Saklı Mod Araç Kiti |
|---|---|---|
| Durum sahipliği | Kodunuz veriyi tutar | Araç kiti bir widget ağacı tutar |
| Kare başına iş yükü | Her karede kullanıcı arayüzünü yeniden oluşturun | Değişiklikte ağacı güncelleyin |
| Kurulum maliyeti | Birkaç fonksiyon çağrısı | Önceden daha fazla yapı |
| En uygun | Üst üste binenler, araçlar, oyun menüleri | Büyük, belge tarzı uygulamalar |
Anında mod, her kare güncellenmesi ve girişe anında yanıt vermesi gereken şeyler için idealdir. Saklı mod, çoğunlukla statik duran ve nadiren değişen şeyler için daha iyidir
Yerli bir müşteriye nasıl uyum sağladığı
Yerel bir yardımcı uygulama istemcisi genellikle C++ ile oluşturulur ve oyunun çerçevesi üzerinde ImGui ile menüsünü çizer. Menü kodu, render döngüsü içinde çalışır, istemcinin kendi ayarlarını okur ve değişiklikleri doğrudan geri yazar. Ayrı bir kullanıcı arayüzü süreci yoktur, bu nedenle bir özelliği etkinleştirmek, istemcinin zaten sahip olduğu bir değere karşı tek bir fonksiyon çağrısıdır.
Bu, bir C++ kalıbıdır. Java ile yazılmış bir Fabric modunun arayüzüne ulaşmak için oyunun kendi GUI bağlantı noktalarını kullanması nedeniyle, ImGui çoğunlukla yerel kod olarak gönderilen istemcilerde ortaya çıkar, Java modları olarak değil.
Sıkça Sorulan Sorular
Çekirdek kütüphane C++'dır ve çoğu proje de onu bu şekilde kullanır. Diğer diller için topluluk bağlamaları mevcut olsa da, orijinal ve en yaygın kullanım C++ oyun araçlarında görülür.
Kutudan çıktığı haliyle sade bir geliştirici aracı görünümüne sahiptir. Özel bir tema stili isteyen veya kendi widget'larını üzerine çizen projeler için oldukça uygundur.
Alışılmadık bir şekilde. Bir Fabric modu Java üzerinde çalışır ve oyunun GUI sistemini kullanır. ImGui için tipik olarak yerli bir C++ istemcisi kullanılır.
Hayır. Kullanıcı arayüzünü yeniden oluşturmak ucuz ve program zaten her kareyi çiziyor, bu yüzden menü de zaten yapılan işin üzerine ekleniyor.