Java Libgdx不断绘制纹理

Java Libgdx不断绘制纹理,java,android,libgdx,Java,Android,Libgdx,当我的if语句为true时,我想画一个纹理 但纹理会显示一秒钟并直接进行处理 我想问,是否有一种方法可以停止处理并显示纹理,即使在条件满足之后 我的渲染方法: @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.begin(); batch.draw(Backgrou

当我的if语句为true时,我想画一个纹理

但纹理会显示一秒钟并直接进行处理

我想问,是否有一种方法可以停止处理并显示纹理,即使在条件满足之后

我的渲染方法:

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

    batch.begin();
    batch.draw(BackgroundImage, 0,0, BackgroundImage.getWidth(), BackgroundImage.getHeight());
    batch.end();

    // Kamera aktualisiert ihre Matrizen
    camera.update();

    // Dem SpriteBatch mitteilen , dass es das
    // Koordinatedsystem , welches von der Kamera erstellt wurde, benutzen soll
    batch.setProjectionMatrix(camera.combined);

    batch.begin();
    for (Rectangle raindrop : raindrops) {
        batch.draw(TropfenTexture, raindrop.x, raindrop.y);
    }
    bmf.setColor(1f, 1f, 1f, 1f);
    bmf.draw(batch, ScoreString, 10, 790);
    batch.end();

    GameSpeedup();

    Iterator<Rectangle> iter = raindrops.iterator();
    while (iter.hasNext()) {
        Rectangle raindrop = iter.next();
        raindrop.y -= 200 * Gdx.graphics.getDeltaTime();
        if (raindrop.y < 0)
            iter.remove();
        if (raindrop.overlaps(BoundsBottom)) {
            //dropSound.play();
            //game.setScreen(new GameOverScreen(game));
            //Gdx.input.vibrate(200);
            batch.begin();
            batch.draw(PfützeTexture, 0, 0);
            batch.end();
            }
        if (Gdx.input.justTouched()) {
            Vector3 tmp = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
            camera.unproject(tmp);
            if (raindrop.contains(tmp.x, tmp.y)) {
                CurrentScore++;
                ScoreString = "" + CurrentScore;
                if (dropSound.isPlaying())
                dropSound.stop();
                dropSound.play();
                iter.remove();
                if (raindrop.contains(tmp.x, tmp.y) && raindrop.overlaps(BoundsBottom)) {
                    CurrentScore++;
                    ScoreString = "" + CurrentScore;
                    dropSound.pause();
                    dropSound.play();
                    iter.remove();
                }
                }
            }
        }

        if (CurrentScore > Highscore){
            Highscore = CurrentScore;
            prefs.putInteger("highscore", Highscore);
            prefs.flush();
        }
    }
@覆盖
公共无效渲染(浮动增量){
glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
batch.begin();
batch.draw(BackgroundImage,0,0,BackgroundImage.getWidth(),BackgroundImage.getHeight());
batch.end();
//Kamera aktualisiert ihre Matrizen
camera.update();
//这是我的小手套
//协调系统,welches von der Kamera Erstellet wurde,benutzen soll
batch.setProjectionMatrix(camera.combined);
batch.begin();
用于(矩形雨滴:雨滴){
批量绘制(TropfenTexture,Raindrople.x,Raindrople.y);
}
bmf.setColor(1f、1f、1f、1f);
bmf.draw(批次,分数串,10790);
batch.end();
游戏加速();
迭代器iter=raindrops.Iterator();
while(iter.hasNext()){
矩形雨滴=iter.next();
raindrop.y-=200*Gdx.graphics.getDeltaTime();
if(雨滴y<0)
iter.remove();
if(雨滴重叠(边界底部)){
//dropSound.play();
//游戏设置屏幕(新游戏屏幕(游戏));
//Gdx。输入。振动(200);
batch.begin();
批量绘制(Pfützettexture,0,0);
batch.end();
}
if(Gdx.input.justTouched()){
Vector3 tmp=newvector3(Gdx.input.getX(),Gdx.input.getY(),0);
摄像机.取消投影(tmp);
if(雨滴含量(tmp.x、tmp.y)){
CurrentScore++;
ScoreString=”“+当前分数;
if(dropSound.isPlaying())
dropSound.stop();
dropSound.play();
iter.remove();
if(雨滴包含(tmp.x、tmp.y)和雨滴重叠(边界底部)){
CurrentScore++;
ScoreString=”“+当前分数;
暂停();
dropSound.play();
iter.remove();
}
}
}
}
如果(当前分数>高分){
Highscore=当前分数;
prefs.putInteger(“highscore”,highscore);
prefs.flush();
}
}

编辑:澄清我的问题并添加更多代码

如果我正确理解您的问题,您不应该通过检查碰撞来渲染对象。而是从游戏实体的数组进行渲染

  • 检查冲突并根据需要删除和添加实体。在你的情况下:除去雨滴,加入飞溅物
  • 渲染对象
  • 更新对象位置

    if(雨滴重叠(边界底部)){
    添加(新的WaterObject());
    //也许可以去掉雨滴?
    }
    batch.start();
    用于(矩形水对象:水矩形){
    绘制(WaterTexture,waterObject.x,waterObject.y);
    }
    //雨滴也是一样
    batch.end();
    //更新职位

  • 希望这有帮助


    关于

    请提供一个答案。“如果我的if语句为真,我想画一个纹理…我想问是否有一种方法可以连续绘制纹理”你不能两者兼得。要么在特定条件下绘制纹理,要么连续绘制纹理。创建另一个跟踪飞溅位置的对象列表。以与绘制雨滴相同的方式循环绘制这些对象。在发现雨滴碰撞时将其添加到飞溅列表中。我认为这是一个很好的答案。我对你选择的顺序感到好奇。我们已经将渲染分为两个子阶段。在第一个子阶段中,我们对所需的实体执行任何更改(添加、更新位置、删除等),在第二个子阶段中,我们执行渲染。上面概述的三个步骤,位置更新是在渲染之后进行的,我很好奇这种分离的原因是什么?