2013-07-31 36 views

Trả lời

13

Trước tiên hãy tạo kết cấu (vùng) với thanh tiến trình tròn đầy đủ. Tiếp theo biến dạng một hình dạng (lưới) tạo thành một hoặc nhiều hình tam giác để phù hợp với khu vực thực tế sẽ được hiển thị.

Đối với điều này, hãy nghĩ về một đường thẳng từ giữa hình ảnh đến giới hạn của hình ảnh. Tính điểm giao nhau (và "tường", tức là trái, phải, trên cùng hoặc dưới cùng của hình ảnh) của đường thẳng tại góc đã cho. Điều này sẽ cho bạn phần kết cấu (vùng) cần vẽ. Ví dụ, nếu dòng ở phần còn lại (góc là số không) đi qua bức tường phía dưới của hình ảnh ở giữa, hình ảnh của bạn là hình vuông và bạn muốn xoay theo chiều kim đồng hồ, sau đó mọi thứ từ 45 đến 135 độ chạm vào bức tường bên trái , từ 135 đến 225 độ chạm vào tường trên cùng, v.v.

Bây giờ bạn có hình dạng, bạn sẽ cần phải thể hiện nó theo hình tam giác. Hoặc để duy trì khả năng tương thích với spritebatch của libgdx, thậm chí một số hình tam giác. Đảm bảo cập nhật giá trị U và V theo vị trí của đỉnh.

Một thực hiện đơn giản này có thể được tìm thấy ở đây: https://github.com/xoppa/world/blob/master/src/com/xoppa/android/misc/RadialSprite.java

+0

Cảm ơn rất nhiều vì điều này. Tôi vừa cập nhật mã của bạn và tạo ra một ý chính. Hy vọng bạn không nhớ: https://gist.github.com/chandujr/5d79f3603efadb566d0a8f7edb5ba0ad – WeirdElfB0y

0

Bạn có thể sử dụng một shader OpenGL để tạo ra một thanh tiến trình hình tròn. Dưới đây là bộ hẹn giờ hoạt ảnh sẽ là một nơi tốt để bắt đầu: http://glsl.heroku.com/e#10201.0

Tuy nhiên, tôi không nghĩ có bất kỳ cơ sở hạ tầng Libgdx nào tốt để bỏ qua trình đổ bóng như thế này. Bạn sẽ phải sử dụng API OpenGL (xem https://code.google.com/p/libgdx/wiki/OpenGLShader).

Các vấn đề liên quan