Java Libgdx不断绘制纹理
当我的if语句为true时,我想画一个纹理 但纹理会显示一秒钟并直接进行处理 我想问,是否有一种方法可以停止处理并显示纹理,即使在条件满足之后 我的渲染方法: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
@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语句为真,我想画一个纹理…我想问是否有一种方法可以连续绘制纹理”你不能两者兼得。要么在特定条件下绘制纹理,要么连续绘制纹理。创建另一个跟踪飞溅位置的对象列表。以与绘制雨滴相同的方式循环绘制这些对象。在发现雨滴碰撞时将其添加到飞溅列表中。我认为这是一个很好的答案。我对你选择的顺序感到好奇。我们已经将渲染分为两个子阶段。在第一个子阶段中,我们对所需的实体执行任何更改(添加、更新位置、删除等),在第二个子阶段中,我们执行渲染。上面概述的三个步骤,位置更新是在渲染之后进行的,我很好奇这种分离的原因是什么?