Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
box2d light导致Libgdx/java性能崩溃_Java_Libgdx_Box2d_Light - Fatal编程技术网

box2d light导致Libgdx/java性能崩溃

box2d light导致Libgdx/java性能崩溃,java,libgdx,box2d,light,Java,Libgdx,Box2d,Light,背景信息 嘿,伙计们,我目前正在开发一个小rpg:)今天我尝试实现一些简单的灯光 主要问题 当我在项目中使用点光源时,fps将变得越来越慢。。。我有一台非常好的电脑,所以它不可能是我的gpu或cpu。。。我错过了什么 这是一张截图 您可以在左下角看到fps:6。 顺便说一下,我禁用了vsync,我的gpu是GTX960。。。所以我真的不知道为什么我的fps这么低 球员级别: package Mobs; public class Player { AnimatedSprite animate

背景信息

嘿,伙计们,我目前正在开发一个小rpg:)今天我尝试实现一些简单的灯光

主要问题

当我在项目中使用点光源时,fps将变得越来越慢。。。我有一台非常好的电脑,所以它不可能是我的gpu或cpu。。。我错过了什么

这是一张截图

您可以在左下角看到fps:6。 顺便说一下,我禁用了vsync,我的gpu是GTX960。。。所以我真的不知道为什么我的fps这么低

球员级别:

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;


}


}
还有我的“光”课:

因为我还有拉格,这是我的主要课程:

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();


}






 }
my Main类中的.doDispose()是从使用的类中处理资源的方法


感谢您的帮助和时间:)

如果您没有处理任何东西,您可能需要查看LibGDX的dispose()函数 这里是链接


如果这不是问题,请告诉我们。

什么是
player.createFixture(PolyConfigure)做什么?它将一个box2d动态对象附加到播放器:)Thx为了查看我的代码,我通常不会得到答案没有问题。你介意用包含的代码编辑你的帖子吗?仅供参考,我是在这样的假设下运行的,即您在每个绘制周期中都在不断地创建资源,而不是释放它们。这将导致渲染速度减慢,因为它必须绘制越来越多的图形。我正在尝试定位可能发生这种情况的位置。我可以删除该部分,因为它仅在附加的屏幕上“绘制”一个动态多边形:)问题在于灯光。您可以尝试暂时删除该代码并检查性能吗?另外,在你的代码中,你是否看到你正在创建可以呈现的对象?啊,这就是我在帖子评论中所想的答案。这是一个很好的发现,确实如此,更新了我的代码:),但仍然有延迟,比如每3-5秒一次:/可能是因为我的渲染方法?
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();


}






 }