Актер отходит от камеры вместо перемещения по оси X в LibGdx - PullRequest
1 голос
/ 14 апреля 2019

Я хочу, чтобы камера следовала за Актером. Я посмотрел много уроков о том, как это сделать, но получаю странную ошибку. Актер, которого я создал под названием «скелет», кажется, удаляется от камеры, а не от оси X. Камера движется по статическим спрайтам нормально.

Я использовал 3 разных типа перемещения актера. Ни один из них, кажется, не работает. Прошу прощения и за плохой код.

экран воспроизведение:

public class PlayScreen implements Screen {
    OrthographicCamera camera;
    Table table;
    Stage stage;
    Viewport viewport;
    private MyGdxGame game;
    skeleton skeleton;

    public PlayScreen(MyGdxGame game){
        this.game = game;
        camera = new OrthographicCamera(1f, (Gdx.graphics.getHeight()/Gdx.graphics.getWidth()));
        viewport =new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(),camera);
        skeleton = new skeleton();
        stage = new Stage(new ScreenViewport());
        skeleton.setPosition((Gdx.graphics.getWidth()/2)-(skeleton.getWidth()/2),((Gdx.graphics.getHeight()/1.75f)-(skeleton.getHeight()/1.4f))); 
        stage.addActor(skeleton);
        Gdx.input.setInputProcessor(stage);
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(1,0,0,1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        skeleton.moveRight();
        camera.position.x = skeleton.getX() + skeleton.getOriginX();
        camera.position.y = skeleton.getY() + skeleton.getOriginY();

        camera.update();
        game.batch.setProjectionMatrix(camera.combined);
        Gdx.input.setInputProcessor(stage);
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
    }

    @Override
    public void resize(int width, int height) {
        viewport.update(width,height);
    }

Актер-скелетон:

public class skeleton extends Actor {
    SpriteBatch batch;
    Texture img;
    int frame = 0;
    int zeile = 0;
    TextureRegion[][] regions;
    public Sprite sprite;

    public skeleton(){
        batch = new SpriteBatch();
        img = new Texture(Gdx.files.internal("Warrior Skeleton Animations/Walking/walk.png"));

        //ANIMATION
        regions = TextureRegion.split(img,572,953);
        sprite = new Sprite(regions[0][0]);

        code to make it an animation...
        (works fine don't wont to enlarge the code here any further)

        setBounds(sprite.getX(),sprite.getY(),sprite.getWidth(),sprite.getHeight());

    }

    public void moveRight(){
        //First way of moving
        MoveByAction mba = new MoveByAction();
        mba.setAmount(10f,0f);
        mba.setDuration(1/10f);
        skeleton.this.addAction(mba);

        //Second way of moving
        //this.setPosition(this.getX()+10,this.getY());
        //setBounds(sprite.getX(),sprite.getY(),sprite.getWidth(),sprite.getHeight());

        //Third way of moving
        //sprite.translateX(1);
        //setBounds(sprite.getX(),sprite.getY(),sprite.getWidth(),sprite.getHeight());
    }

    @Override
    protected void positionChanged() {
        sprite.setPosition(getX(),getY());
        super.positionChanged();
    }

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

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

Я пытался перемещать камеру независимо от актера-скелета следующим образом: camera.position.x = camera.position.x + 100; И актер все еще отходит от камеры, даже если камера движется быстрее, чем актер.

Я также пытался переместить камеру с координатами самого спрайта от актера-скелета. Та же ошибка, хотя.

Заранее спасибо.

1 Ответ

0 голосов
/ 14 апреля 2019

Я нашел способ исправить это для меня.

Если я перемещаю камеру, а не актера, я получаю эффект перемещения актера. Это доказывает, что мой актер привязан к моей камере.

Я все равно хотел бы знать, почему это так и как это исправить.

...