Sự khác biệt giữa betwen Texture, TextureRegion, TextureAtlas, Sprite và Image trong libgdx là gì?


11

Tôi đã tìm kiếm xung quanh để tìm hướng dẫn. Tôi đã thấy mọi người sử dụng các lớp trên để tải hình ảnh.

Theo hiểu biết của tôi, tất cả các lớp có thể đọc không phải là hai hình ảnh, TextureRegion / TextureAtlas thường được sử dụng để tải trang sprite, trong đó trang tính chứa nhiều hình ảnh. Trong khi đối với Texture / Sprite / Image, chúng được sử dụng để tải một tấm sprite với một hình ảnh duy nhất.

Tuy nhiên, tôi không chắc chắn trong trường hợp nào tôi nên sử dụng Texture / Sprite / Image và trong tình huống nào tôi nên sử dụng TextureRegion / TextureAtals.

Vui lòng sửa lại cho tôi nếu tôi sai, vì tôi hơi bối rối bởi các thuật ngữ trong API sau khi xem các hướng dẫn khác nhau.

Câu trả lời:


17

Đầu tiên, Texture vs TextureRegion: Khi bạn làm một cái gì đó như Texture t = new Texture (đường dẫn), bạn đang tải nó vào GPU. Ngoài ra, bạn nên tải sức mạnh của 2 kết cấu. Bạn có thể làm việc với các độ phân giải khác (Texture.setEnforcePotImages = false), nhưng được khuyến khích sử dụng pow 2.

Bây giờ, TextureRegion, lấy một "mảnh" từ Texture, bất kể đó là kích thước. Ưu điểm của việc có một Texture và nhiều TextureRegion của Texture đó, là bạn KHÔNG tải mọi vùng vào GPU.

Như bạn có thể nghĩ, khi bạn muốn vẽ bằng SpriteBatch, sử dụng TextureRegion thay vì nhiều Hoạ tiết sẽ hiệu quả hơn nhiều, tôi xin lỗi tiếng Anh của tôi không đủ tốt. Đây là một lời giải thích tốt: Hoạ tiết TextureRegion & SpriteBatch


Bây giờ, bạn muốn sử dụng TextureRegion và một hình ảnh duy nhất có độ phân giải 2 với tất cả các spritesheets và hình ảnh. Bạn có phải tạo TextureRegions với tất cả các tọa độ và kích thước không? Bạn có cần mở sơn để đếm pixel? Không, bạn không. Bạn có thể sử dụng một cái gì đó như TexturePacker . Nó sẽ đóng gói mọi kết cấu thành một hình ảnh VÀ tạo một tệp .pack với các kích thước và tọa độ của tất cả chúng.

TexturePacker

Kết quả sẽ là một cái gì đó như thế này:

Đóng gói

Thay vì tạo Texture, hãy tạo TextureAtlas, như thế này:

Tạo TextureAtlas

Bây giờ, việc tạo TextureRegions của bạn sẽ đơn giản như:

tìm kiếm

(Lưu ý rằng tên của khu vực là tên của hình ảnh gốc mà không có phần mở rộng).


Sprite giữ thông tin hình học, màu sắc và kết cấu để vẽ các họa tiết 2D bằng Batch. Điều này có nghĩa, bạn có thể dễ dàng xoay chúng và di chuyển. Tôi đã tạo lớp Thực thể của riêng mình và tôi không cần lớp Sprite. Bạn có thể sẽ làm như vậy. Tôi không tìm thấy lớp học này thực sự hữu ích.


Lớp hình ảnh kế thừa từ Diễn viên. Điều này có nghĩa là bạn có thể thêm nó vào một giai đoạn. Đây là một phần của gói Scene2D. Nếu bạn chưa quen với libgdx và bạn không biết về gói này, thì đây là thông tin đủ cho bạn về lớp này. Đây là một chủ đề thực sự thú vị, nhưng không trả lời trong câu hỏi này.

Hy vọng nó giúp :)


Cảm ơn! Điều đó rõ ràng hơn bây giờ. :) Vậy còn hiệu suất của việc tạo TextureRegion từ Texture và tạo TextureRegion từ TextureAtlas thì sao?
15783

4
@ user15783 Hỏi như một câu hỏi mới.
David J. Liszewski

Rất nhiều thông tin tốt, nhưng phần này không chính xác / sai lệch: "bạn KHÔNG tải mọi vùng vào GPU" Trên thực tế, bạn đang tải mọi vùng vào GPU. Chỉ là nhiều TextureRegions có thể tham chiếu các phần riêng biệt (hoặc chồng chéo) của một kết cấu, trong khi Textureluôn đề cập đến toàn bộ hình ảnh. Vì chuyển đổi kết cấu là đắt tiền, điều này là tốt. Mô tả của bạn làm cho nó nghe giống như TextureRegiongiao dịch với kết cấu thưa thớt (a la. GL_ARB_sparse_texture) Nhưng libGDX và hầu hết phần cứng mà nó chạy trên không hỗ trợ phần mở rộng đó.
bcrist

Ngoài ra, vui lòng thích các khối mã đánh dấu của SE hơn các ảnh chụp màn hình của mã. Bằng cách đó, thật dễ dàng để sao chép và dán mọi thứ nếu mọi người muốn. Chỉ cần bắt đầu mỗi dòng của khối mã với bốn khoảng trắng. Khoảng cách mã nội tuyến có thể được tạo bởi văn bản xung quanh với ký tự trọng âm (backtick): `
bcrist
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.