不能修改演员的坐标,也不能在不同的地方画画

时间:2015-01-02 17:15:14

标签: libgdx coordinates actor scene2d

Firstable,对不起我的英语。我有这个让我疯狂的问题。 我只想用箭头键进行演员动作,但他不动,为什么? 这是Screen类代码:

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();
}


}

请帮忙!感谢

1 个答案:

答案 0 :(得分:0)

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

rectGato.setPosition(getX(),getY());

我注意到你从未在其他任何地方定义过rectoGato,你可能想设置精灵的位置,所以我把它改为:

sprite.setPosition(getX(),getY());

现在一切都适合我,演员随着按键移动。希望这会有所帮助。

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

manager.finishLoading();

然后设置屏幕而不是在render方法中完成所有操作。你以前的所作所为似乎是正确的,但你应该试试看它是否有效。这是我的猜测。