2016-02-03 3 views
1

Справочная информацияLibgdx аварии/Java Performance с Box2D света

Эй, ребята, я в настоящее время работает на маленьком рпг :) а сегодня я попытался реализовать некоторые легкий свет ....

Главная Вопрос

Когда я использую Point light в моем проекте, fps будет медленнее и медленнее ... у меня очень хороший компьютер, поэтому он не может быть моим gpu или cpu ... Так что же я пропустил?

Херес Скриншот enter image description here

Вы можете увидеть в левом нижнем углу экрана кадров в секунду: 6. Кстати, я отключил Vsync и мой GPU является 960 GTX ... так что я действительно не знаю, почему я имеет настолько низкое фпс ...

класс игрока:

package Mobs; 


public class Player { 

AnimatedSprite animatedSprite; 
SpriteBatch batch; 

Light licht = new Light(Color.WHITE,500); 


public int state = 0; 
public int netState = 1; 
float speed = 2f; 
public Vector2 position = new Vector2(256,256); 
public Vector2 networkPosition = new Vector2(0,0); 



public Player(){ 



} 


public void update(){ 

     state = 0; 

     if(Gdx.input.isKeyPressed(Keys.A)){ 
      position.x -= Gdx.graphics.getDeltaTime() * 100f; 


      state = 1; 
      //System.out.println(currentState); 
     } 
     if(Gdx.input.isKeyPressed(Keys.D)){ 
      position.x += Gdx.graphics.getDeltaTime() * 100f;  


      state = 2; 
      //System.out.println(currentState); 
     } 
     if(Gdx.input.isKeyPressed(Keys.W)){ 
      position.y += Gdx.graphics.getDeltaTime() * 100f; 


      state = 3; 
      //System.out.println(currentState); 
     } 
     if(Gdx.input.isKeyPressed(Keys.S)){ 
      position.y -= Gdx.graphics.getDeltaTime() * 100f; 


      state = 4; 
      //System.out.println(currentState); 
     } 



} 

public void setX(float x){ 

    position.x = x; 

} 

public void setY(float y){ 

    position.y = y; 

} 

public void draw(float f, float g, OrthographicCamera camera){ 

    position.x = f; 
    position.y = g; 

    //System.out.println("In beforeSetState : "+currentState); 
    animatedSprite.setState(state); 
    //System.out.println("In after : "+currentState); 
    animatedSprite.createAnimation(); 

    camera.position.set(f,g,0); 
    camera.update(); 

    licht.drawLight(camera, f+25 , g+25); 


    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    batch.draw(animatedSprite.convertAnimationTOframes(),f,g, Gdx.graphics.getWidth()/25,Gdx.graphics.getHeight()/15); 
    batch.end(); 



} 


public void doSetup(){ 


    batch = new SpriteBatch(); 
    animatedSprite = new AnimatedSprite(); 


} 



public float getX(){ 


    return position.x; 


} 

public float getY(){ 


    return position.y; 


} 


} 

И мой "Light" класс:

package Screen; 


public class Light { 


World world; 
RayHandler rayHandler; 
PointLight pointLight; 
Body player; 
Box2DDebugRenderer debugRenderer; 



public Light(Color farbe, int radius) { 

    world = new World(new Vector2(0,0),false); 
    rayHandler = new RayHandler(world); 

    pointLight = new PointLight(rayHandler, 500 , farbe , radius, 0, 0); 
    pointLight.setSoftnessLength(0f); 

    debugRenderer = new Box2DDebugRenderer(); 


} 


public void drawLight(OrthographicCamera playerCam, float x, float y){ 

    world.step(1/60f, 8, 3); 


    debugRenderer.render(world, playerCam.combined); 

    pointLight.setPosition(x,y); 

    rayHandler.setCombinedMatrix(playerCam.combined); 
    rayHandler.updateAndRender(); 




} 

public void removeLights(){ 

    rayHandler.removeAll(); 
    pointLight.remove(); 


} 


} 

Потому что я все еще получил laggs, Heres мои MainClass:

public class LauncherScreen implements Screen{ 

//----------------------------------------------------------- 
//-----------------idle Animation---------------------------- 
//----------------------------------------------------------- 

Map duengon; 

AnimatedSprite animationForMultiplayer; 
SpriteBatch spriteBatch; 
Player mySelf; 

OrthographicCamera mpPlayerCam; 
OrthographicCamera camera; 

static Client client = new Client(); 
Launcher launcher = new Launcher(); 


int[][] map = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 
       {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}; 


@Override 
public void render(float delta) { 
    // TODO Auto-generated method stub 

    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 


    launcher.update(); 

    //------------------------------------------------------------------------ 
    //------------------------Draws the Map----------------------------------- 
    //------------------------------------------------------------------------ 


    duengon.ubdate(map, camera); 



    //------------------------------------------------------------------------ 
    //------------------------Draws the Players------------------------------- 
    //------------------------------------------------------------------------ 



    for(MPPlayer mpPlayer : launcher.getPlayersValue()){ 

     animationForMultiplayer.setState(mpPlayer.state); 

     animationForMultiplayer.createAnimation();   

     camera.position.set(mpPlayer.x,mpPlayer.y,0); 


     spriteBatch.setProjectionMatrix(camera.combined); 

     spriteBatch.begin();     
     spriteBatch.draw(animationForMultiplayer.convertAnimationTOframes(), mpPlayer.x, mpPlayer.y,Gdx.graphics.getWidth()/25,Gdx.graphics.getHeight()/15);  // #6 
     spriteBatch.end(); 

     System.out.println("mpPlayer : "+mpPlayer.x+" "+mpPlayer.y); 


    } 


    mySelf.update(); 
    mySelf.draw(launcher.getPlayerX(), launcher.getPlayerY(), camera); 

    camera.update(); 

    System.out.println(Gdx.graphics.getFramesPerSecond()); 

    System.out.println("player : "+launcher.getPlayerX()+" "+launcher.getPlayerY()); 



} 




@Override 
public void show() { 
    // TODO Auto-generated method stub 
    animationForMultiplayer = new AnimatedSprite(); 
    spriteBatch = new SpriteBatch();    
    mySelf = new Player(); 

    mySelf.doSetup(); 

    mpPlayerCam = new OrthographicCamera(0,0); 
    mpPlayerCam.setToOrtho(false); 


    camera = new OrthographicCamera(0, 0); 
    camera.setToOrtho(false); 

    duengon = new Map(); 



} 


@Override 
public void resize(int width, int height) { 
    // TODO Auto-generated method stub 

} 


@Override 
public void hide() { 
    // TODO Auto-generated method stub 

} 




@Override 
public void pause() { 
    // TODO Auto-generated method stub 

} 




@Override 
public void resume() { 
    // TODO Auto-generated method stub 

} 




@Override 
public void dispose() { 
    // TODO Auto-generated method stub 

    spriteBatch.dispose(); 
    mySelf.doDispose(); 
    animationForMultiplayer.doDispose(); 
    duengon.doDispose(); 


} 






} 

.doDispose() в моем MainClass являются методы, избавляется ресурс из классов используют

Спасибо за вашу помощь и ваше время :)

+0

Что делает 'player.createFixture (polygonFixture),' do? – Andonaeus

+0

Он придает Box2d динамический объект для игрока :) Thx для просмотра моего кода, часто не получается получить ответ – genaray

+1

Нет проблем. Не могли бы вы отредактировать свой пост с включенным кодом? FYI, я убежден, что вы как-то постоянно создаете ресурсы с каждым циклом розыгрыша, а не освобождаете их. Это приведет к замедлению рендеринга, поскольку он должен все больше привлекать. Я пытаюсь найти, где это может произойти. – Andonaeus

ответ

2

вы ничего не утилизации, вы можете захотеть взглянуть на функцию Dispose() из LibGDX Вот ссылка https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/Disposable.html

если это не проблема, пожалуйста, дайте нам знать.

+0

А, это ответ на то, о чем я думал в комментариях к сообщению. Хорошая находка на этом – Andonaeus

+0

Сделал это, убредил мой код :), но все равно получил лагги, как каждые 3-5 секунд:/возможно, из-за моего метода рендеринга? – genaray

 Смежные вопросы

  • Нет связанных вопросов^_^