2011-09-26 24 views
30

Có thể hiển thị kết cấu bằng SpriteBatch trong libGdx (Java engine cho Android/Desktop) không? Nếu vậy, làm thế nào?libgdx SpriteBatch hiển thị kết cấu

Về cơ bản, tôi muốn hiển thị mọi thứ tới 320 x 240 vùng có kích thước 512 x 256 và so với vùng tỷ lệ để vừa với màn hình (ở chế độ ngang). Bằng cách này, tôi muốn loại bỏ hiện vật xảy ra khi tôi quy mô kết cấu pha trộn alpha một cách độc lập. Nếu có bất kỳ cách nào khác để xóa các hiện vật đó, vui lòng chỉ cho chúng ra :)

Và có tài liệu trực tuyến nào cho libGdx không?

+0

Tôi quan tâm đến một tính năng như vậy. Tuy nhiên, sau khi xem lướt qua mã 'SpriteBatch', tôi không nghĩ rằng nó sẽ tầm thường để thực hiện một tính năng như vậy - và nó sẽ liên quan đến việc biên dịch lại thư viện. Tôi đã thêm một số chức năng vào 'Pixmap' (về bản địa) trong quá khứ, nhưng điều này có vẻ khó khăn hơn. – huff

Trả lời

59

Đoạn mã này được trao cho tôi trên diễn đàn LibGDX và nó hoạt động hoàn hảo.

private float m_fboScaler = 1.5f; 
private boolean m_fboEnabled = true; 
private FrameBuffer m_fbo = null; 
private TextureRegion m_fboRegion = null; 

public void render(SpriteBatch spriteBatch) 
{ 
    int width = Gdx.graphics.getWidth(); 
    int height = Gdx.graphics.getHeight(); 

    if(m_fboEnabled)  // enable or disable the supersampling 
    {     
     if(m_fbo == null) 
     { 
      // m_fboScaler increase or decrease the antialiasing quality 

      m_fbo = new FrameBuffer(Format.RGB565, (int)(width * m_fboScaler), (int)(height * m_fboScaler), false); 
      m_fboRegion = new TextureRegion(m_fbo.getColorBufferTexture()); 
      m_fboRegion.flip(false, true); 
     } 

     m_fbo.begin(); 
    } 

    // this is the main render function 
    my_render_impl(); 

    if(m_fbo != null) 
    { 
     m_fbo.end(); 

     spriteBatch.begin();   
     spriteBatch.draw(m_fboRegion, 0, 0, width, height);    
     spriteBatch.end(); 
    } 
} 
+3

Tuyệt vời, cảm ơn !! – huff

+6

Điểm của việc sử dụng một TextureRegion quấn quanh bộ đệm khung để giữ cho kết cấu lật được đánh giá cao ở đây. Người mới đi lưu ý. –

+0

Tôi đang gặp một số sự cố khi triển khai: http://i.gyazo.com/7329707597bf94974dfd76fc1f33285d.gif Nếu tôi vẽ spriteBatch của mình, mọi thứ đều ổn, nhưng khi tôi cố gắng nắm bắt mọi thứ trong FBO, tôi gặp sự cố với FBO vẽ tất cả những thứ mà trước đó đã được kết xuất. Bất kỳ ý tưởng? – Daryl

3

Hiện tại, tôi khuyên bạn nên sử dụng Pixmap s. Bạn thấy đấy, không có nhiều hàm được viết cho chúng, nhưng dường như bạn có thể viết Pixmap (với kênh alpha) sang một số khác (pm1.drawPixmap(pm2, srcx, srcy, w, h, ...)), với điều kiện bạn không muốn mở rộng nó (bạn có thể mở rộng thành phần sau đó, nhưng tỷ lệ hình ảnh được sử dụng trong bố cục sẽ không được thay đổi kích thước ... trừ khi bạn viết chức năng thay đổi kích thước).

Nếu bạn muốn thực hiện các công việc phức tạp hơn (như viết một chuỗi bằng cách sử dụng BitmapFont vào Texture để thao tác sau hoặc viết nó vào Pixmap và sau đó tải nó lên bộ nhớ video), ... nếu bạn thành công (vì tôi muốn đi theo hướng đó để tối ưu hóa). Tôi nghĩ rằng tốt nhất là nên thêm các chức năng cần thiết vào libgdx ...

Dù sao, đừng lấy bất cứ điều gì tôi viết ở đây là sự thật không thể phủ nhận được nếu tôi tiếp tục, tôi sẽ cập nhật.

Tài liệu Tôi thấy có phần giới hạn -Tôi chắc chắn bạn đã trải qua nó rồi. Có thông tin trong blog của badlogic và trong trang dự án googlecode - và cũng có một cuốn sách tương đối hay được viết bởi Mario, "Beginning Android Games". Ngoài ra, có một vài (rất cơ bản) video. Và đừng quên rằng bạn có thể tham khảo mã nguồn và các ví dụ đẹp ...

Ngoài ra, bạn luôn có thể hỏi trong diễn đàn: http://badlogicgames.com/forum/

CẬP NHẬT: Câu trả lời của bạn bằng cách sử dụng FrameBufferTextureRegion là không thể phủ nhận nhiều tốt hơn. Tôi để cái này chỉ vì nó đề cập đến tài liệu.

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