2016-03-08 119 views
3

我想用libGDX開發一個簡單的2D側滾動遊戲。libGDX渲染TextureRegion渲染得太多

我的世界包含許多不同的64x64像素塊,這些塊由SpriteBatch使用相機繪製以適應屏幕。我的640x640px資源文件包含所有這些圖像。塊資源位於我的資源文件中的(0,0),(0,64),(64,0)...等等。 當我的應用程序啓動,我加載的紋理和創造了許多不同的TextureRegions:

texture = new Texture(Gdx.files.internal("texture.png")); 
    block = new TextureRegion(texture, 0, 0, 64, 64); 
    block.flip(false, true); 
    // continue with the other blocks 

現在,當我使我的世界裏,一切似乎都很好。但是某些塊(大約佔我的塊的10%)被繪製爲好像TextureRegion的矩形位置錯誤 - 它將上面(在資源紋理中)塊的紋理的最底部的像素行繪製爲其最上面的像素行。大部分塊都被正確渲染,我檢查了我多次輸入了正確的位置。

奇怪的是,當我在我的電腦上啓動遊戲 - 而不是我的Android設備 - 紋理繪製正確!

在搜索解決方案時,很多人都提到過濾器,但Linear和Nearest都不適合我。 :(

希望我能夠在一個可訪問的方式來解釋這個問題,你有什麼想法如何解決(=如何繪製只是我想畫的紋理區域)!

最好的問候

編輯:的錯誤並只出現在某些位置當我得出兩個模塊在不同位置相同的紋理,其中一人繪製正確,另一種是不。我不明白這一點。 ...

+0

我想不出解決辦法,但我建議你看看LibGdx紋理打包器。一切都將被自動打包和解壓縮,我不認爲你會有這個奇怪的繪圖問題。 –

+0

聽起來像一個紋理過濾問題。無論是那樣,或者你將浮點座標轉換爲程序中某個地方的整數,並且意外截斷(舍入),因此63.99999變爲63. –

回答

3

當打包到一個tex中時,您應該始終在圖像之間留出空白區域因爲如果對每個像素使用FILTER_LINEAR(我認爲是默認值),它將從四個最接近的像素採樣。如果您的圖像沒有空像素填充,對於所有邊緣像素,它將從鄰居圖像獲取像素。

所以三個選項來解決你的問題:

  1. 手動在你紋理文件使用FILTER_LINEAR
  2. 停止圖像之間添加空格(但你會得到難看的結果,如果你沒有在本地圖像dimentions繪圖例如縮放圖像)
  3. 使用Libgdx紋理包裝機,它有一個內置功能,它要做到這一點,當你收拾你的圖片
+1

非常感謝!我嘗試了第三個,然後使用Texture Packer,現在所有東西都可以正常工作:)這甚至可以使我加載所有不同的紋理變得更容易,因爲紋理打包器允許我對紋理進行索引:D所以非常感謝:) – WhiteStripes