2014-09-22 92 views
0

我在libgdx幀速率有問題,如果我做錯了什麼,alguin可以啓發我,因爲我不認爲這是正常的,問題是我加載瓷磚地圖和簡單的,如果把最高分辨率320×320,800×600說這下降到12幀/秒左右,我希望解釋得很好PUE腹股溝不是母語感謝。Libgdx問題幀速率(FPS)

public class MyGdxGame extends ApplicationAdapter { 

SpriteBatch batch; 
Texture img; 

private OrthogonalTiledMapRenderer bachTileMapRender; 
private OrthographicCamera camera; 
private TiledMap map; 

private int[] background = new int[] {0}, foreground = new int[] {1}; 

@Override 
public void create() { 

    batch = new SpriteBatch(); 

    img = new Texture("badlogic.jpg"); 

    map = new TmxMapLoader().load("maps/untitled.tmx"); 

    bachTileMapRender = new OrthogonalTiledMapRenderer(map, 1/32f);//Asignar mapa 

    camera = new OrthographicCamera(Gdx.graphics.getWidth(),Gdx.graphics.getHeight()); 
    camera.setToOrtho(false, 32, 32); //Virtual dimensiones 

} 

@Override 
public void render() { 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    //batch.begin(); 
    //batch.draw(img, 0, 0); 
    //batch.end(); 

    camera.update(); 

    bachTileMapRender.setView(camera); 
    bachTileMapRender.render(background); 

    System.out.println("fps:"+Gdx.graphics.getFramesPerSecond()); 



} 

}

320×320幀速率大約是60,但是爬上了窗口,或使用800×600迅速下降

public class DesktopLauncher { 
public static void main (String[] arg) { 
    LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); 

    config.width = 320; 
    config.height = 320; 
    new LwjglApplication(new MyGdxGame(), config); 
} 

} PD:這是值得我的電腦是雙核3000,在debian linux中

untitled.tmx

<?xml version="1.0" encoding="UTF-8"?> 
<map version="1.0" orientation="orthogonal" width="32" height="32" tilewidth="32"  tileheight="32"> 
<tileset firstgid="1" name="prueba" tilewidth="32" tileheight="32"> 
<image source="title.png" width="384" height="128"/> 
</tileset> 
<layer name="Capa de Patrones 1" width="32" height="32"> 
<data encoding="base64" compression="zlib"> 
eJztwwEJAAAMBKHr8f17rsdQcNVUVVXV1w8ar2wB 
</data> 
</layer> 
</map> 
+0

你確定它只是在你改變分辨率下降嗎?難道這是因爲320 * 320具有不同的縱橫比然後是800 * 600的縮放/拉伸? – Madmenyo 2014-09-22 11:19:45

+0

感謝您的回答,如果我更改了類DesktopLauncher config.width = 320; config.height = 320; 發生800 x 600或更高分辨率 – 2014-09-22 11:25:32

+0

奇怪,如果將其更改爲800x800,該怎麼辦?如果這仍然運行良好,它必須與伸展有關,因爲您將相機設置爲800x800。另外爲什麼你將orthocamera.x設置爲false?你應該使用camera.setToOrtho(800,800,false); – Madmenyo 2014-09-22 11:28:11

回答

0

如果你這樣做?

//Swap these lines 
map = new TmxMapLoader().load("maps/untitled.tmx"); //first load map 
bachTileMapRender = new OrthogonalTiledMapRenderer(map); //then use map 

camera.setToOrtho(false, 800, 600); //X, Y, Z using the aspect ratio you want. 

//Gfx config 
config.width = 800; 
config.height = 600; 

此外,您要渲染多少個圖塊?

+0

我的LibGDX:void com.badlogic .gdx.graphics.OrthographicCamera。 setToOrtho(boolean yDown,float viewportWidth,float viewportHeight)Camera.setToOrtho(boolean ...,Float ...,Float ...) – 2014-09-22 11:50:03

+0

瓷磚31x31,分辨率32x32一塊瓷磚 – 2014-09-22 11:56:47

+0

是的,你是正確的正交相機,對不起一陣子我猜。它必須與拉伸有關,因爲在低分辨率下你會得到很好的結果。沒有那麼多的瓷磚,這應該不成問題。 – Madmenyo 2014-09-22 12:03:21

0

有可能,問題是TextureFilter
如果Texel s(Texture的像素)與它們在屏幕上使用的像素不匹配,則需要重新計算它們。
例如:你有一個16×16像素的Texture,它應該在屏幕上使用20 * 20像素。
TextureFilter然後定義如何計算屏幕上的像素。
有2個重要TextureFilter S:
- Nearest:獲取最近的Texel
- Linear:獲取的4個最近Texel小號

可以看到,該linear濾費用更多的性能。
所以,你應該嘗試使用Nearest,這可能看起來並不那麼好...
您可能會注意到,你可以設置2個TextureFilter S:
- 放大倍數:如果Texture較小,則地方需要在屏幕上,這個過濾器被使用
- 縮小:如果Texture比屏幕上的位置大,則使用此過濾器。

你也可以使用MipMapping,它可以讓你有相同的Texture不同的分辨率,並使用最匹配的分辨率。

我會推薦閱讀:Know Your Texture Filters!

+0

感謝您的回覆,但正如我讀了這篇文章似乎對我有趣,但糾正我,如果我錯了,負責充電器瓷磚地圖充電的紋理是不是通過textureAtlas充電,沒有或沒有訪問過濾器類型。在文件中.pack – 2014-09-22 13:54:54

+0

該包描述了使用的紋理過濾器。但你不應該需要最近的過濾才能在桌面上流暢運行,只需一個簡單的地圖!也許你可以將.pack文件的前幾行添加到你的問題中,以便我們看到它的設置。 – Tenfour04 2014-09-22 14:16:48

+0

gracias謝謝你的回覆,我不使用這個產品.Pack測試文件只是一個問題,以前的建議,這裏只是加載一張地圖和紋理tilemap通過tilemap加載器在那裏收取.tmx文件採用文件路徑使用紋理創建平鋪我想我 – 2014-09-22 14:24:24