Libgdx içindeki Texture, TextureRegion, TextureAtlas, Sprite ve Image arasındaki farklar nelerdir?


12

Etrafta öğreticiler aradım. Görüntüleri yüklemek için yukarıdaki sınıfları kullanan insanlar gördüm.

Anladığım kadarıyla, tüm sınıflar iki görüntünün gücü olmadan okuyabilir, TextureRegion / TextureAtlas genellikle sayfanın birden fazla görüntü içerdiği sprite sayfasını yüklemek için kullanılır. Doku / Sprite / Görüntü için kullanılırken, tek bir görüntüyle sprite sayfası yüklemek için kullanılırlar.

Ancak, hangi durumda Texture / Sprite / Image kullanmam ve hangi durumda TextureRegion / TextureAtals kullanmam gerektiğinden emin değilim.

Çeşitli eğiticilere baktıktan sonra API'daki terminolojilerle biraz karıştığım için lütfen yanılıyorsam beni düzeltin.

Yanıtlar:


18

İlk olarak, Texture vs TextureRegion: Doku t = yeni Doku (yol) gibi bir şey yaptığınızda, bunu GPU'ya yüklersiniz. Ek olarak, 2 doku gücü yüklemelisiniz. Diğer çözünürlüklerle çalışabilirsiniz (Texture.setEnforcePotImages = false), ancak 2'nin gücünü kullanması önerilir.

Şimdi, TextureRegion, boyutu ne olursa olsun, bir Dokudan bir "parça" alır. Bir Dokuya ve birden fazla Dokuya sahip olmanın avantajı, her bir dokuyu GPU'ya yüklememenizdir.

Düşündüğünüz gibi, SpriteBatch ile çizim yapmak istediğinizde, çoklu Dokular yerine TextureRegion kullanmak çok daha verimli, üzgünüm İngilizcem yeterince iyi değil. İşte iyi bir açıklama: Textures TextureRegion & SpriteBatch


Şimdi, tüm hareketli sayfalarda ve görüntülerde 2 çözünürlük gücünde TextureRegion ve tek bir görüntü kullanmak istiyorsunuz. Tüm koordinatları ve boyutları içeren TextureRegions'ı oluşturmak zorunda mısınız? Pikselleri saymak için boyayı açmanız mı gerekiyor? Hayır, değil. TexturePacker gibi bir şey kullanabilirsiniz . Her dokuyu tek bir görüntüde toplayacak ve hepsinin boyutları ve koordinatları ile bir .pack dosyası oluşturacak.

TexturePacker

Sonuç böyle bir şey olacaktır:

paket

Bir Doku oluşturmak yerine, şu şekilde bir TextureAtlas oluşturun:

TextureAtlas Oluştur

Şimdi, TextureRegions'ınızı oluşturmak şu kadar basit olacaktır:

findRegion

(Bölge adının, uzantısız orijinal görüntünün adı olduğunu unutmayın).


Sprite, Toplu iş kullanarak 2B sprite çizmek için geometri, renk ve doku bilgilerini tutar. Bu, onları kolayca döndürebilir ve hareket ettirebilirsiniz. Kendi Entity sınıfımı oluşturdum ve Sprite sınıfına ihtiyacım yok. Muhtemelen aynısını yapardın. Bu sınıfı gerçekten kullanışlı bulmuyorum.


Image sınıfı, Actor'dan miras alır. Bu, bir sahneye ekleyebileceğiniz anlamına gelir. Scene2D paketinin bir parçası. Libgdx'te yeniyseniz ve bu paket hakkında bir bilginiz yoksa, bu sınıf hakkında sizin için yeterli bilgi. Bu gerçekten ilginç bir konu, ancak bu soruya cevap vermemek.

Umarım yardımcı olur :)


Teşekkürler! Şimdi daha açık. :) O halde Texture'dan TextureRegion oluşturma ve TextureAtlas'tan TextureRegion oluşturma performansı ne olacak?
user15783

4
@ user15783 Yeni bir soru olarak sor.
David J. Liszewski

Birçok iyi bilgi, ancak bu bölüm yanlış / yanıltıcı: "Her bölgeyi GPU'ya yüklemiyorsunuz" Aslında her bölgeyi GPU'ya yüklüyorsunuz. Sadece birden fazla TextureRegions, bir dokunun farklı (veya çakışan) kısımlarına referans verebilirken, Textureher zaman tüm görüntüyü ifade eder. Dokular arasında geçiş yapmak pahalı olduğu için bu iyidir. Açıklamanız TextureRegionseyrek dokularla (a la. GL_ARB_sparse_texture) İlgileniyor gibi görünüyor, ancak libGDX ve üzerinde çalıştığı donanımın çoğu bu uzantıyı desteklemiyor.
bcrist

Ayrıca, SE'nin kodlama ekran görüntülerine göre markdown kod bloklarını tercih edin. Bu şekilde, insanlar isterse bir şeyleri kopyalayıp yapıştırmak kolaydır. Kod bloğunun her satırına dört boşlukla başlamanız yeterlidir. Satır içi kod açıklıkları, vurgulu vurgu (backtick) karakteri ile çevreleyen metin tarafından oluşturulabilir: ``
bcrist
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.