Tuesday, August 9, 2016

Texture Atlas



   Hôm nay mình sẽ giới thiệu cho các bạn một công cụ mới tên là texture atlas.
Mục đích của bài này không phải là chuyên sâu về texture atlas hay bắt các bạn sử dụng mỗi texture atlas không. Thực ra, mục đích của mình khi viết bài này là giới thiệu cho các bạn một công cụ hỗ trợ cho texture region trong bài trước. Vì khi ta phối hợp texture atlas với texture region, việc lập trình sẽ đơn giản hơn một bước.

   Trước khi tiến sâu vào phần này, các bạn chắc hẳn vẫn còn nhớ texture packer trong bài texture region của mình chứ ? Ở đây mình nói đến phần mềm texture packer của codeandweb ( mình sẽ đăng bài hướng dẫn cách sử dụng sau) và phần mềm sẵn trong libgdx. Mình khuyên mấy bạn mới thì nên sử dụng phần mềm, vì sẽ nhanh hơn và tiện lợi hơn. Ngay cả những lập trình viên lâu năm cũng sử dụng phần mềm nhé. Ít ai dùng có sẵn lắm.

   Khi bạn ghép ảnh xong hẳn bạn sẽ thấy 2 files. Một là file ảnh với đuôi tùy bạn chỉnh nhưng mình khuyên nên dùng đuôi ".png" vì tối ưu cho mobile app hơn. Và file còn lại là một text thường có đuôi là ".txt" nếu bạn sử dụng phần mềm ngoài và đuôi ".pack" nếu bạn sử dụng phần mềm có sẵn trong libgdx. Và khi bạn mở file ".txt" hay ".pack" lên bạn sẽ thấy như thế này

file ".txt" hay ".pack"

   Nhiều bạn sẽ thắc mắc tại sao lại có file ".txt" làm gì ? Mình xin thưa file này sẽ ghi lại tất cả các thuộc tính (kích thước, vị trí,...) của tất cả các bức ảnh mà bạn đã ghép vào. Và file này chính là thứ cực kỳ quan trọng khi bạn sử dụng texture atlas. Khác với texture hay texture region, texture atlas sẽ sử dụng file này để tìm thông tin về ảnh của bạn. Bạn không cần phải nêu ra địa chỉ , đường dẫn tới bức hình mà chỉ cần chỉ ra đường dẫn tới file này là texture atlas sẽ tự động tìm cho bạn.

   Để khởi tạo một texture atlas bạn cần phải cho cả hai file ".png" hay đuôi khác tùy bạn và ".txt" hay ".pack" vào trong thư mục asset nhé. Thiếu bất kỳ file nào trong 2 file, libgdx đều báo lỗi nhé.
thêm 2 file vào libgdx
   Sau khi đã thêm 2 file thì bạn bắt đầu khởi tạo texture atlas :

                                    TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("jumpjump.pack");

                      TextureAtlas : lớp TextureAtlas.
                      atlas : biến của lớp TextureAtlas.

                       "jumpjump.pack" : tên file ".pack" ( bạn có thể sử dụng đuôi ".txt" nếu file của bạn là ".txt" )

            Nếu bạn muốn biết rõ hơn về cách libgdx tìm địa chỉ hay đường dẫn thì bạn tham khảo thêm trong bài texture mình có đề cập tới. 


   Phần tiếp theo chính là phần mình thích nhất ở texture atlas.
   Bạn thử đọc đoạn code này nhé:

     private TextureRegion a,b,c,d;
     private TextureAtlas atlas;

     //khởi tạo texture atlas
     public void createAtlas(){
          atlas = new TextureAtlas(Gdx.files.internal("jumpjump.pack");
     }

     // khởi tạo texture region
     public void createRegion(){
          a = atlas.findRegion("a");
          b = atlas.findRegion("b");
          c = atlas.findRegion("c");
          d = atlas.findRegion("d");
     }


   Bạn thấy gì nào ?

   Trước hết là khai báo biến. Chúng ta có 4 biến texture region a,b,c,d và một biến texture atlas.

   Sau đó chúng ta khởi tạo texture atlas trong hàm createAtlas(). 

   VÀ 

   chúng ta khởi tạo texture region bằng atlas !!! và bạn có thể thấy KHÔNG cần phải biết vị trí của bức ảnh ở đâu chúng ta vẫn có thể tạo được texture region. Đây chính là điểm lợi của texture atlas. 

   * Ngoài lề :
   Lúc đầu nhiều bạn sẽ tưởng texture atlas là công cụ chứa ảnh khác như texture hay texture region chứ không phải hỗ trợ cho texture region như vậy. Bạn không hề sai. Texture atlas cũng có chức năng như texture region hay texture nhưng những chức năng đó đối với mình là không cần thiết. Vì mình nghĩ texture region là đủ rồi. Chính vì thế mình chỉ đề cập đến một vài chức năng của texture atlas có ích với các bạn.


   a.findRegion("a");   "a" chính là tên của bức ảnh bạn định lấy chứ không phải giống hệt biến nhé :) mình viết vậy vì mình không nghĩ ra cái tên nào thôi và mình thường đặt giống tên bức ảnh cho dễ nhớ. Tên biến có thể thay đổi nhưng bạn muốn tìm đúng bức ảnh thì trong phương thức findRegion(String name);  bạn phải điền đúng tên bức ảnh đó nhé. Tên bức ảnh có trong file ".pack" hay ".txt" của bạn đấy.

   Vậy là xong phần texture atlas rồi hy vọng bạn sẽ có thêm thật nhiều kiến thức trong lĩnh vực lập trình libgdx này :))

ps: mình sẽ làm hướng dẫn về phần mềm texture packer trong phần tới :)).
   


















1 comment:

  1. cho mình hỏi 1 chút về sqlite IOS có được ko? Cảm ơn bạn

    ReplyDelete