Hiện đang tạo trò chơi và cố gắng tạo lớp phủ để che màn hình khi nút "menu" được nhấp vào - thứ mà tôi tưởng tượng là khá phổ biến/đơn giản nhưng vẫn gặp sự cố khi triển khai.Sử dụng ShaderProgram trong libgdx để tạo lớp phủ cho menu trong trò chơi
Các thiết lập hiện tại tôi có:
- TiledMapRenderer: để render TMX gạch (nền/bản đồ)
- SpriteBatch: đối với tài sản khác nhau (hình ảnh người chơi ví dụ.)
- Stage: để giữ menu nút
- ShaderProgram: sử dụng GLSL để tạo hiệu ứng lớp phủ/che
- SpriteBatch và bản đồ được thiết lập để sử dụng ShaderProgram
Theo đề xuất của nhiều người, để thực hiện, tôi chỉ sử dụng một SpriteBatch - do đó, cùng một lô sprite được sử dụng bởi cả hai nội dung và giai đoạn menu khác nhau.
Mục đích của trình đổ bóng là thêm lớp phủ tối/nửa trong suốt để tô xám màn hình để menu sẽ dễ đọc hơn khi mở.
Vấn đề chính tôi đang gặp là vì tài sản và menu chia sẻ cùng một SpriteBatch, họ cũng chia sẻ shader cùng ... vì vậy, khi tôi cho phép các hiệu ứng đổ bóng mọi thứ (nút nền và menu) là màu xám nhạt.
Làm cách nào tôi chỉ có thể sử dụng một SpriteBatch nhưng chỉ áp dụng Shader cho nền (và giữ các nút menu bình thường/không bị che khuất)?
Một số ý tưởng: Sử dụng một _second_ 'SpriteBatch'?Chỉ áp dụng hiệu ứng chuyển màu xám sau một ngưỡng 'z' nhất định? –
Từ sự hiểu biết của tôi, nó không phải là tốt để sử dụng nhiều hơn một SpriteBatch vì nó có tác động đáng kể đến hiệu suất. Vì vậy, lý do tôi chỉ sử dụng một SpriteBatch. – pyko