Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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
Android Libgdx渲染纹理与精灵_Android_Opengl Es_Libgdx_Box2d - Fatal编程技术网

Android Libgdx渲染纹理与精灵

Android Libgdx渲染纹理与精灵,android,opengl-es,libgdx,box2d,Android,Opengl Es,Libgdx,Box2d,我正在尝试用Libgdx和Box2d构建我的第一个游戏。 这个游戏有一个与Flappy Bird相似的概念。我的问题是渲染管道 我尝试过绘制矩形,然后绘制新的精灵,每次调用渲染方法时,我都可以将其缩小到不同的管道大小。这样做的问题是,一旦矩形离开屏幕,我就无法处理纹理,因为它会使所有其他仍然可见的矩形失去纹理。如果我不处理纹理,一旦它离开屏幕,它会使游戏在20秒后变得非常缓慢 另一个选项是为不同的管道尺寸使用大约10种不同的纹理,但仍然存在处理纹理的问题 如果您能给我建议如何有效地渲染不同的管道

我正在尝试用Libgdx和Box2d构建我的第一个游戏。 这个游戏有一个与Flappy Bird相似的概念。我的问题是渲染管道

我尝试过绘制矩形,然后绘制新的精灵,每次调用渲染方法时,我都可以将其缩小到不同的管道大小。这样做的问题是,一旦矩形离开屏幕,我就无法处理纹理,因为它会使所有其他仍然可见的矩形失去纹理。如果我不处理纹理,一旦它离开屏幕,它会使游戏在20秒后变得非常缓慢

另一个选项是为不同的管道尺寸使用大约10种不同的纹理,但仍然存在处理纹理的问题

如果您能给我建议如何有效地渲染不同的管道尺寸,我将不胜感激。我在下面附上了我的渲染代码

  @Override
public void render(float delta) {
    Gdx.gl.glClearColor(0,0,0,0);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    world.step(BOX_STEP, BOX_VELOCITY_ITERATIONS, BOX_POSITION_ITERATIONS);

    batch.setProjectionMatrix(camera.combined);

    batch.begin();
    //background.setPosition(camera.position.x-camera.viewportWidth/2, camera.position.y-14);
    //background.draw(batch);
    batch.end();

    //bg1.update();
    //bg2.update();

    updateAnimation();

    if((TimeUtils.nanoTime()/10) - (lastDropTime/10) > 300000000) 
        createPipes();

       batch.begin();

       for(Rectangle raindrop: raindrops) {
              pipe_top.setSize(4, raindrop.height);
          pipe_top.setPosition(raindrop.x,  raindrop.y);
          pipe_top.draw(batch);

          pipe_bottom.setSize(4, raindrop.height);
          pipe_bottom.setPosition(raindrop.x, camera.position.y + (camera.viewportHeight/2-pipe_bottom.getHeight()));
          pipe_bottom.draw(batch);

       }
       batch.end();

       if(pipe.getX() < 0){
           pipe.getTexture().dispose();
       }

       Iterator<Rectangle> iter = raindrops.iterator();
          while(iter.hasNext()) {
             Rectangle raindrop = iter.next();
             raindrop.x -= 4 * Gdx.graphics.getDeltaTime();

             if(raindrop.x  < -35) iter.remove();

          }

    debug.render(world, camera.combined);
}
@覆盖
公共无效渲染(浮动增量){
Gdx.gl.glClearColor(0,0,0,0);
Gdx.gl.glClear(GL10.gl\u颜色\u缓冲\u位);
世界步(长方体步、长方体速度步、长方体位置步);
batch.setProjectionMatrix(camera.combined);
batch.begin();
//背景.设置位置(camera.position.x-camera.viewportWidth/2,camera.position.y-14);
//背景。绘制(批次);
batch.end();
//bg1.update();
//bg2.update();
updateAnimation();
如果((TimeUtils.nanoTime()/10)-(lastDropTime/10)>300000000)
createPipes();
batch.begin();
用于(矩形雨滴:雨滴){
管道顶部设置尺寸(4,雨滴高度);
管道顶部设置位置(雨滴.x,雨滴.y);
管道顶部图纸(批次);
管道底部设置尺寸(4,雨滴高度);
pipe_bottom.setPosition(raindrop.x,camera.position.y+(camera.viewportHeight/2-pipe_bottom.getHeight());
管道底部拉伸(批次);
}
batch.end();
if(pipe.getX()<0){
pipe.getTexture().dispose();
}
迭代器iter=raindrops.Iterator();
while(iter.hasNext()){
矩形雨滴=iter.next();
raindrop.x-=4*Gdx.graphics.getDeltaTime();
如果(raindrop.x<-35)iter.remove();
}
debug.render(世界、摄影机、组合);
}

您必须尽可能快地维护render()方法。加载资源非常慢,因此应该使用create()方法创建纹理和精灵

此外,你不需要像雨滴一样多的精灵,你可以重复使用同一个精灵,改变它的位置和大小,并多次绘制


希望这能有所帮助。

我这样做了,但它仍然让游戏变得超慢,我需要一种方法,在图像不再可见时处理它,而不影响其他图像。也许我做错了什么。你能用更新的代码更新这个问题吗?另外,在createPipes()中做了什么?