Actor远离相机,而不是在LibGdx中的X轴上移动

时间:2019-04-14 18:01:11

标签: java camera libgdx

我希望摄像机跟随演员。我看了很多有关如何执行此操作的教程,但是却遇到了一个奇怪的错误。 我创建的称为“骨架”的Actor似乎从相机移开,而不是在X轴上。 相机可以很好地移动静态精灵。

我使用了3种不同类型的演员移动。他们似乎都不起作用。 还要为错误的代码表示歉意。

播放屏幕:

/usr/src/

骨架演员:

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); } } 独立于骨架演员移动摄像机:即使摄像机比演员移动得快,演员也仍然远离摄像机。

我还尝试使用骨骼演员的精灵本身的坐标移动摄像机。还是一样的错误。

谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了一种修复方法。

如果我移动相机本身而不是演员,那么我将获得演员移动的效果。这证明我的演员已绑定到我的相机。

我仍然很想知道为什么会这样,但是如何解决。