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时,您能否提供主类的代码?