Libgdx 不能修改演员的坐标并在不同的地方画他

Libgdx 不能修改演员的坐标并在不同的地方画他,libgdx,coordinates,actor,scene2d,Libgdx,Coordinates,Actor,Scene2d,首先,对不起我的英语。我有一个让我发疯的问题。 我只想让演员用箭头键移动,但他不动,为什么? 以下是屏幕类代码: public class PantallaTest implements Screen{ JuegoTest juego; Texture gato; Sprite gatoSprite; Stage escenario; GatoActor gatoActor; public PantallaTest(JuegoTest juego) { this.juego = j

首先,对不起我的英语。我有一个让我发疯的问题。 我只想让演员用箭头键移动,但他不动,为什么? 以下是屏幕类代码:

public class PantallaTest implements Screen{

JuegoTest juego;
Texture gato;
Sprite gatoSprite;
Stage escenario;
GatoActor gatoActor;

public PantallaTest(JuegoTest juego) {

    this.juego = juego;
}

@Override
public void show() {

    escenario = new Stage(new FitViewport(320f, 320f));
    gato = juego.manager.get("cat_stand.png", Texture.class);
    gatoSprite = new Sprite(gato);
    gatoActor = new GatoActor(gatoSprite);

    Gdx.input.setInputProcessor(escenario);
    escenario.addActor(gatoActor);
}

@Override
public void render(float delta) {

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    escenario.draw();
    escenario.act();

    updateJuego();
}

private void updateJuego() {

    if(Gdx.input.isKeyPressed(Keys.LEFT)){
        gatoActor.setX(gatoActor.getX()-2);
    }
    if(Gdx.input.isKeyPressed(Keys.RIGHT)){
        gatoActor.setX(gatoActor.getX()+2);
    }
    if(Gdx.input.isKeyPressed(Keys.UP)){
        gatoActor.setY(gatoActor.getY()+2);
    }
    if(Gdx.input.isKeyPressed(Keys.DOWN)){
        gatoActor.setY(gatoActor.getY()-2);
    }
}
以及演员的代码:

public class GatoActor extends Actor {

    Sprite sprite;

    public GatoActor(Sprite sprite) {

        this.sprite = sprite;
        this.setSize(sprite.getWidth(),sprite.getHeight());
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {

        Color col = getColor();
        batch.setColor(col.r, col.g, col.b, col.a * parentAlpha);

        batch.draw(sprite,getX(),getY(), getOriginX(), getOriginY(), getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());
    }

    @Override
    public void act(float delta) {
        rectGato.setPosition(getX(),getY());
        super.act(delta);
    }
}
主类的代码

public class JuegoTest extends Game{

PantallaTest pTest;
AssetManager manager;
SpriteBatch batch;

@Override
public void create() {

    batch = new SpriteBatch();
    manager = new AssetManager();
    manager.load("cat_stand.png", Texture.class);
    manager.load("platform.png", Texture.class);

    pTest = new PantallaTest(this);

}

@Override
public void dispose() {

    manager.dispose();
    batch.dispose();
    super.dispose();
}

@Override
public void render() {

    if(manager.update()){
        this.setScreen(pTest);
    }
    super.render();
}


}

请帮忙!谢谢

您在构建项目时是否遇到任何错误?我唯一的问题是在你的GatoActor类中,在act方法中,你使用了:

rectGato.setPosition(getX(),getY());
我注意到您从未在其他任何地方定义过rectoGato,您可能想设置精灵的位置,因此我将其更改为:

sprite.setPosition(getX(),getY());
现在一切对我来说都很好,演员随着按键移动。希望这有帮助

编辑* 对于加载图像后的主类,您应该尝试

manager.finishload()


然后设置屏幕,而不是在渲染方法中执行所有操作。你以前所做的似乎是对的,但你应该试试看它是否有效。这是我的猜测。

对象rectGato不应该出现。当我在不使用AssetManager的情况下加载纹理来创建精灵时,效果很好。这就是问题所在。我在主类中创建AssetManager,它可以很好地加载资源,但我无法更新坐标或在其他位置绘制参与者。使用AssetManager时,您能否提供主类的代码?