Object LibGDX非常奇怪的bug-对象消失了

Object LibGDX非常奇怪的bug-对象消失了,object,libgdx,Object,Libgdx,当我在libGDX中创建我的第一个平铺贴图生成器时,我注意到一个非常奇怪的bug。我创建的对象网格如下所示: private static final int GRID_WIDTH=2400; private static final int GRID_HEIGHT=2400; private static final int CELL_SIZE=60; private void createMap(){ cells = new Cell[GRID_WIDTH/CELL_SIZE][G

当我在
libGDX
中创建我的第一个平铺贴图生成器时,我注意到一个非常奇怪的bug。我创建的对象网格如下所示:

private static final int GRID_WIDTH=2400;
private static final int GRID_HEIGHT=2400;
private static final int CELL_SIZE=60;
private void createMap(){
    cells = new Cell[GRID_WIDTH/CELL_SIZE][GRID_HEIGHT/CELL_SIZE];

    for(int i=0;i<GRID_WIDTH/CELL_SIZE;++i){
        for(int j=0;j<GRID_HEIGHT/CELL_SIZE;++j){
            cells[i][j]=new Cell(textures[0],i*CELL_SIZE,j*CELL_SIZE);
        }
    }
}
因此,您可以看到有2400/60x2400/60个对象或单元。我正在这样创建我的地图:

private static final int GRID_WIDTH=2400;
private static final int GRID_HEIGHT=2400;
private static final int CELL_SIZE=60;
private void createMap(){
    cells = new Cell[GRID_WIDTH/CELL_SIZE][GRID_HEIGHT/CELL_SIZE];

    for(int i=0;i<GRID_WIDTH/CELL_SIZE;++i){
        for(int j=0;j<GRID_HEIGHT/CELL_SIZE;++j){
            cells[i][j]=new Cell(textures[0],i*CELL_SIZE,j*CELL_SIZE);
        }
    }
}

照相机是正确的。问题是批处理.begin()和批处理.end()的问题。正如您可能知道的那样,如果不关闭其中一个,则不能直接在每个批处理之后执行
batch.begin()
,然后执行
shaperender.begin()
。原因我不是百分之百的担心<代码>阶段的工作原理类似。这意味着我们必须在绘制阶段之前关闭批次

batch.end();
stage.draw();
batch.begin();
// draw your batch stuff here
而且这样做也很可怕

batch = new SpriteBatch();
camera=new OrthographicCamera(CAM_WIDTH,CAM_HEIGHT);
在渲染方法内部。相反,将其放入
create()
方法或您自己的一些初始化方法中。重要的是不要在每一帧都创建一个新的SpriteBatch,因为GC没有收集批处理。因此,您必须使用批处理()手动处理它,否则它将泄漏大量内存,您的RAM将很快消失


我希望这对你有所帮助,祝你好运。

相机是正确的。问题是批处理.begin()和批处理.end()的问题。正如您可能知道的那样,如果不关闭其中一个,则不能直接在每个批处理之后执行
batch.begin()
,然后执行
shaperender.begin()
。原因我不是百分之百的担心<代码>阶段的工作原理类似。这意味着我们必须在绘制阶段之前关闭批次

batch.end();
stage.draw();
batch.begin();
// draw your batch stuff here
而且这样做也很可怕

batch = new SpriteBatch();
camera=new OrthographicCamera(CAM_WIDTH,CAM_HEIGHT);
在渲染方法内部。相反,将其放入
create()
方法或您自己的一些初始化方法中。重要的是不要在每一帧都创建一个新的SpriteBatch,因为GC没有收集批处理。因此,您必须使用批处理()手动处理它,否则它将泄漏大量内存,您的RAM将很快消失


我希望这对您有所帮助,祝您好运。

您显示的代码看起来是正确的。你能告诉我们你是如何移动照相机的吗?我还不能证明这一点,但我的蜘蛛感觉告诉我相机有问题。我用相机设置编辑了代码:)你显示的代码看起来是正确的。你能告诉我们你是如何移动照相机的吗?我还不能证明这一点,但我的蜘蛛感应告诉我相机有问题。我用相机设置编辑了代码:)很抱歉初始化,但我简化了我的项目,并使用了不正确的代码渲染。但是我在我的原始代码中没有这样做:)非常感谢您提供的批处理解决方案:)很抱歉进行了初始化,但我简化了我的项目并使用了错误的代码。但我在我的原始代码中并没有这样做:)非常感谢您提供批处理的解决方案:)