Apa perbedaan antara Texture, TextureRegion, TextureAtlas, Sprite dan Image di libgdx?

12

Saya sudah mencari-cari tutorial. Saya telah melihat orang menggunakan kelas di atas untuk memuat gambar.

Sesuai dengan pemahaman saya, semua kelas dapat membaca dalam non-kekuatan dua gambar, TextureRegion / TextureAtlas biasanya digunakan untuk memuat lembar sprite, di mana lembar tersebut berisi beberapa gambar. Sedangkan untuk Texture / Sprite / Image, mereka digunakan untuk memuat lembar sprite dengan gambar tunggal.

Namun, saya tidak begitu yakin dalam situasi mana saya harus menggunakan Texture / Sprite / Image dan dalam situasi mana saya harus menggunakan TextureRegion / TextureAtals.

Harap perbaiki saya jika saya salah, karena saya sedikit bingung dengan terminologi dalam API setelah mencari berbagai tutorial.

pengguna15783
sumber

Jawaban:

18

Pertama, Tekstur vs TeksturRegion: Ketika Anda melakukan sesuatu seperti Tekstur t = Tekstur baru (path), Anda memuatnya ke dalam GPU. Selain itu, Anda harus memuat kekuatan 2 tekstur. Anda bisa bekerja dengan resolusi lain (Texture.setEnforcePotImages = false), tetapi disarankan untuk menggunakan pow dari 2.

Sekarang, TextureRegion, mengambil "sepotong" dari Tekstur, tidak peduli itu dimensi. Keuntungan memiliki satu Tekstur dan beberapa TextureRegion dari Tekstur itu, adalah bahwa Anda TIDAK memuat setiap wilayah ke dalam GPU.

Seperti yang mungkin Anda pikirkan, ketika Anda ingin menggambar dengan SpriteBatch, itu jauh lebih efisien untuk menggunakan TextureRegion daripada beberapa Tekstur, maaf bahasa Inggris saya tidak cukup baik. Berikut adalah penjelasan yang bagus: Tekstur TextureRegion & SpriteBatch


Sekarang, Anda ingin menggunakan TextureRegion dan satu gambar tunggal berkekuatan 2 resolusi dengan semua spritesheets dan gambar. Apakah Anda harus membuat TextureRegions dengan semua koordinat dan dimensi? Apakah Anda perlu membuka cat untuk menghitung piksel? Tidaaaak, kamu tidak. Anda dapat menggunakan sesuatu seperti TexturePacker . Ini akan mengemas setiap tekstur menjadi satu gambar DAN membuat file .pack dengan dimensi dan koordinat semuanya.

TexturePacker

Hasilnya akan seperti ini:

Pak

Alih-alih membuat Tekstur, buat TextureAtlas, seperti ini:

Buat TextureAtlas

Sekarang, membuat TextureRegions Anda semudah:

findRegion

(Perhatikan bahwa nama wilayah adalah nama gambar asli tanpa ekstensi).


Sprite menyimpan informasi geometri, warna, dan tekstur untuk menggambar sprite 2D menggunakan Batch. Ini artinya, Anda dapat dengan mudah memutarnya dan bergerak. Saya telah membuat kelas Entity saya sendiri, dan saya tidak perlu kelas Sprite. Anda mungkin akan melakukan hal yang sama. Saya tidak menemukan kelas ini sangat berguna.


Kelas gambar mewarisi dari Aktor. Ini berarti Anda dapat menambahkannya ke dalam panggung. Itu bagian dari paket Scene2D. Jika Anda baru mengenal libgdx, dan Anda tidak tahu tentang paket ini, ini cukup informasi untuk Anda tentang kelas ini. Ini adalah topik yang sangat menarik, tetapi tidak menjawab dalam pertanyaan ini.

Semoga bermanfaat :)

Kirchhoff
sumber
Terima kasih! Itu lebih jelas sekarang. :) Lalu bagaimana dengan kinerja menciptakan TextureRegion dari Texture dan membuat TextureRegion dari TextureAtlas?
user15783
4
@ user15783 Ajukan pertanyaan baru.
David J. Liszewski
Banyak informasi bagus, tetapi bagian ini tidak akurat / menyesatkan: "Anda TIDAK memuat setiap wilayah ke dalam GPU" Faktanya, Anda memuat setiap wilayah ke dalam GPU. Hanya saja beberapa TextureRegions dapat mereferensikan bagian yang berbeda (atau tumpang tindih) dari suatu tekstur, sementara Textureselalu mengacu pada keseluruhan gambar. Karena mengganti tekstur itu mahal, ini bagus. Deskripsi Anda membuatnya terdengar seperti TextureRegionberurusan dengan tekstur jarang (a la. GL_ARB_sparse_texture) Tetapi libGDX dan sebagian besar perangkat keras yang dijalankannya tidak mendukung ekstensi itu.
bcrist
Juga, lebih suka blok kode penurunan harga SE daripada tangkapan layar kode. Dengan begitu mudah untuk menyalin dan menempelkan sesuatu jika orang menginginkannya. Mulai saja setiap baris blok kode dengan empat spasi. Rentang kode sebaris dapat dibuat dengan mengelilingi teks dengan karakter aksen (backtick): `
bcrist