Java libGDX更新和呈现任务分离

Java libGDX更新和呈现任务分离,java,android,libgdx,Java,Android,Libgdx,我正在尝试学习libGDX游戏开发的一些简单原则,并开始学习下面的代码。我已经将更新和渲染任务分开,但不太确定如何将它们结合在一起。我只想画一个简单的矩形,在屏幕上移动。我的代码如下。除了渲染之外,一切都正常 package com.mygdx.gameobjects; import com.badlogic.gdx.math.Rectangle; public class Egg { private Rectangle egg; public Egg(){ egg = new

我正在尝试学习libGDX游戏开发的一些简单原则,并开始学习下面的代码。我已经将更新和渲染任务分开,但不太确定如何将它们结合在一起。我只想画一个简单的矩形,在屏幕上移动。我的代码如下。除了渲染之外,一切都正常

package com.mygdx.gameobjects;

import com.badlogic.gdx.math.Rectangle;

public class Egg {

private Rectangle egg;

public Egg(){
    egg = new Rectangle(0, 0, 20, 20);
}

public void update(float delta) {
    egg.x++;
    if (egg.x > 137) {
        egg.x = 0;
    }
}

public Rectangle getEgg() {
    return egg;
}

}
使用的更新方法:

package com.mygdx.gameworld;

import com.badlogic.gdx.Gdx;
import com.mygdx.gameobjects.Egg;

public class GameWorld {

private Egg egg;

public GameWorld() {

    egg = new Egg();
}

public void update(float delta) {

    Gdx.app.log("GameWorld", "update");
    egg.update(delta);
}

public Egg getEgg() {
    return egg;

}
}
package com.mygdx.gameworld;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.mygdx.gameobjects.Egg;

public class GameRenderer {

private GameWorld myWorld;
private OrthographicCamera cam;
private ShapeRenderer shapeRenderer;
private Egg rect;


public GameRenderer(GameWorld world) {
    myWorld = world;
    cam = new OrthographicCamera();
    cam.setToOrtho(true, 136, 204);
    shapeRenderer = new ShapeRenderer();
    shapeRenderer.setProjectionMatrix(cam.combined);

}

public void render() {
    Gdx.app.log("GameRenderer", "render");
    Gdx.gl.glClearColor(0, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    shapeRenderer.begin(ShapeRenderer.ShapeType.Line);

    shapeRenderer.setColor(255 / 255.0f, 109 / 255.0f, 120 / 255.0f, 1);

    shapeRenderer.rect(myWorld.getEgg().x, myWorld.getEgg().y,
            myWorld.getEgg().width, myWorld.getEgg().height);

    shapeRenderer.end();


}
}
使用的渲染方法:

package com.mygdx.gameworld;

import com.badlogic.gdx.Gdx;
import com.mygdx.gameobjects.Egg;

public class GameWorld {

private Egg egg;

public GameWorld() {

    egg = new Egg();
}

public void update(float delta) {

    Gdx.app.log("GameWorld", "update");
    egg.update(delta);
}

public Egg getEgg() {
    return egg;

}
}
package com.mygdx.gameworld;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.mygdx.gameobjects.Egg;

public class GameRenderer {

private GameWorld myWorld;
private OrthographicCamera cam;
private ShapeRenderer shapeRenderer;
private Egg rect;


public GameRenderer(GameWorld world) {
    myWorld = world;
    cam = new OrthographicCamera();
    cam.setToOrtho(true, 136, 204);
    shapeRenderer = new ShapeRenderer();
    shapeRenderer.setProjectionMatrix(cam.combined);

}

public void render() {
    Gdx.app.log("GameRenderer", "render");
    Gdx.gl.glClearColor(0, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    shapeRenderer.begin(ShapeRenderer.ShapeType.Line);

    shapeRenderer.setColor(255 / 255.0f, 109 / 255.0f, 120 / 255.0f, 1);

    shapeRenderer.rect(myWorld.getEgg().x, myWorld.getEgg().y,
            myWorld.getEgg().width, myWorld.getEgg().height);

    shapeRenderer.end();


}
}

您需要将相机应用于形状渲染器


放置
shaperender.setProjectionMatrix(cam.combined)就在
shaperender之前。开始

谢谢您的帮助。没用。还有其他建议吗?你确定eg my的坐标在摄像机的视野内吗?这是我能想到的唯一的另一件事。坐标肯定在摄像机的视野中。如果我直接在GameWorld类中编写Egg类代码,那么一切都很好。但是我们的想法是让游戏世界只更新。也许你可以为游戏世界和鸡蛋添加绘图代码,这样我们就可以看到哪里出了问题。