- ImGui (Dear ImGui), C++ için küçük, anında modlu bir grafik kullanıcı arayüzü (GUI) kütüphanesidir.
- Her karede, fonksiyon çağrıları aracılığıyla menüyü yeniden çizer, herhangi bir widget ağacı bakımını gerektirmez.
- Yerel istemciler ve araçlar, 3D bir sahnenin üzerine düşük gecikmeli bir örtü için onu tercih ederler.
- Bu, bir C++ kalıbıdır; Java Fabric modları, oyunun kendi GUI bağlantı noktalarını kullanır.
ImGui, Dear ImGui'nin kısaltmasıdır, C++ için küçük, anında modlu bir grafik kullanıcı arayüzü (GUI) kütüphanesidir. Widget nesnelerinin bir ağacını korumak yerine, her karede düz fonksiyon çağrıları aracılığıyla menüyü yeniden çizer. Bu, kurulumunu hızla sağlamayı ve bir oyunun mevcut render döngüsünün üzerine kolayca yerleştirmeyi mümkün kılar; bu nedenle araçlar ve yerel istemciler düşük gecikmeli üst üste bindirmeler için onu kullanır.
Opal Nerede Çalışır
Opal, bir Fabric mod'udur, bu nedenle oyunun kendi GUI bağlantı noktaları aracılığıyla arayüzünü oluşturur, ImGui yerine. Yerel kodu değiştirmeden özellikler eklemek istiyorsanız, GraalVM JavaScript betik çalıştırma motoru ile başlamak için doğru yerdir. Kurulum rehberine ve betik çalıştırma rehberine bakın.
Anlamı Ne Demek?
ImGui, arayüzü her karede yeniden oluşturur. Bir buton nesnesi oluşturup saklamazsınız. "Buraya bir buton çiz" diyen bir fonksiyonu çağırırsınız ve bu çağrı hem butonu çizer hem de bu karede tıklanıp tıklanmadığını size bildirir.
Saklı 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. Anlık mod, bu kalıcı yapıyı, kendi durumunuzun yanında okunan ve yaşayan koda karşılık getirir.
Neden Araçlar ve İstemciler Bunu Seçiyor?
ImGui, 3D bir sahnenin üzerine yerleştirilen menüler için popülerdir. Bunun pratik nedenleri vardır.
- Düşük gecikme süresi: programın zaten oluşturduğu bir kareye bağlanır, böylece menü hemen tepki verir.
- Az ekleme: bir pencere ve birkaç kontrol, sadece birkaç fonksiyon çağrısıdır. Yönetilmesi gereken bir düzen dosyası veya ayrı bir UI iş parçacığı yoktur.
- Bağımsız: kütüphanenin az bağımlılığı vardır ve yaygın grafik arka uçlarına uyum sağlar, bu nedenle ağır bir çerçeve çekmez.
- Hata ayıklamaya uygun: yayın menüsünü oluşturan aynı çağrılar, geliştiricilerin bir özelliği oluştururken kullandıkları geçici hata ayıklama panellerini de oluşturur.
Anlık Mod vs Saklı Mod
| Yön | Anında Mod (ImGui) | Saklı Mod Araç Kiti |
|---|---|---|
| Durum sahipliği | Kodunuz veriyi tutar | Araç kiti bir widget ağacını tutar |
| Kare başına çalışma | 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 |
Yerel bir istemciye nasıl uyum sağlıyor
C++ ile oluşturulmuş yerel bir yardımcı istemci, genellikle oyunun çerçevesi üzerinde ImGui ile menüsünü çizer. Menü kodu, render döngüsünün içinde çalışır, istemcinin kendi ayarlarını okur ve değişiklikleri doğrudan yazar. Ayrı bir kullanıcı arayüzü süreci olmadığından, bir özelliği etkinleştirmek, istemcinin zaten sahip olduğu bir değere karşı yalnızca bir fonksiyon çağrısıdır.
Bu, bir C++ kalıbıdır. Fabric ile yazılmış bir Java modu, oyunun kendi GUI bağlantı noktaları aracılığıyla arayüzüne ulaşır, bu nedenle ImGui çoğunlukla yerel kod olarak gönderilen istemcilerde görünür, Java modları olarak değil.
SSS
Çekirdek kütüphane C++ ile yazılmıştır ve çoğu proje de onu bu şekilde kullanır. Diğer diller için topluluk tarafından oluşturulmuş bağlayıcılar mevcut olsa da, orijinal ve en yaygın kullanımı C++ oyun araçları ve yerel uygulamalarda görülür.
Kutudan çıktığı haliyle sade bir geliştirici aracı görünümüne sahiptir. Özel bir stil teması isteyen veya kendi widget'larını üzerine çizen projeler, gönderilen bir menünün varsayılan görünümünden hiçbir şey gibi görünmesini sağlayabilir.
Genellikle hayır. Bir Fabric modu Java üzerinde çalışır ve oyunun kendi GUI sistemini kullanır. ImGui için tipik ortam, yerli C++ istemcisidir.
Hayır. Arayüzü yeniden oluşturmak ucuzdur ve program zaten her kare çizim yapıyor, dolayısıyla menü de zaten yapılan işin üzerine ekleniyor.