Libgdx actor moveTo action не работает - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь перемещать актера от сцены к точке действиями, и это не работает, я пытался часами, и это просто не работает, я буду рад помощи ..

У меня естьискал в интернете коды, и все, что я пробовал, не сработало, я действительно не понимаю, что не так с этим кодом, он в основном такой же, как рабочий учебник в интернете

класс актера:

public class Player extends Actor {

float x,y;
float screenWidth,screenHeight;
private Sprite sprite;
Texture image;
float width,height;
public Player(Texture image,float x, float  y,float width,float height, float screenWidth, float screenHeight)
{
    this.width = width;
    this.height = height;
    this.x = x;
    this.y = y;
    this.screenWidth = screenWidth;
    this.screenHeight = screenHeight;

    this.image = image;
    sprite = new Sprite(image, 0, 0, image.getWidth(), image.getHeight());
    sprite.setPosition(x, y);

}

@Override
public float getX() {
    return x;
}

@Override
public void setX(float x) {
    this.x = x;
}

@Override
public float getY() {
    return y;
}

@Override
public void setY(float y) {
    this.y = y;
}

@Override
public float getWidth() {
    return width;
}

@Override
public void setWidth(float width) {
    this.width = width;
}

@Override
public float getHeight() {
    return height;
}

@Override
public void setHeight(float height) {
    this.height = height;
}

@Override
public void act(float delta) {
    super.act(delta);
}

@Override
public void draw (Batch batch, float parentAlpha) {
    batch.draw(sprite,x,y,width,height);
}
}

и основной класс:

            player = new Player(playerTexture,screenWidth/2,screenHeight-200,playerTexture.getWidth(),playerTexture.getHeight(),screenWidth,screenHeight);
 MoveToAction action = new MoveToAction();
        action.setPosition(300f,0f);
        action.setDuration(10f);
        player.addAction(action);

  @Override
public void render(float delta) {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.setProjectionMatrix(orthographicCamera.combined);
    batch.begin();
    // batch.draw(playerTexture,10,10,10,10);

    batch.end();

    stage.act(Gdx.graphics.getDeltaTime());

    stage.draw(); //this will call the batch to draw the sprite
}

1 Ответ

0 голосов
/ 12 июня 2018

У актера уже есть поля x, y, width и height.Так как вы создали свой собственный, вы скрыли эти параметры.

Источник вашей проблемы в том, что вы не смогли переопределить setPosition() для использования ваших полей.Таким образом, действие перемещения вызывает это и изменяет поля, которые вы скрыли, и когда вы рисуете, вы используете свои собственные поля, которые не были изменены.

Не скрывать поля.Это очень подвержено ошибкам.Вы должны удалить поля, которые я упоминал выше, вместе со всеми вашими переопределениями методов получения и установки.

Вот общее правило для ООП в целом: если вы переопределяете любой метод получения или установки без вызова супер-метода, вы, вероятно, что-то нарушаете.

Не связано, но вы должны использовать TextureRegion вместо Sprite.Sprite - это TextureRegion с дополнительными параметрами для размера и положения.Поскольку эти функции также есть в Actor, использование Sprite является избыточным и подверженным ошибкам.

...