LIBGDX相机不动

时间:2015-08-14 13:17:33

标签: android libgdx scene2d

我的游戏设置了这个屏幕,我看到了我创建的演员。

然而,任何人都可以告诉我为什么相机似乎没有移动?当我按下左键时,我希望演员向右移动。

Gdx.input.isKeyPressed(Input.Keys.LEFT)确实解析为true,并且会调用translate函数。

public class MainScreen implements Screen {

    private Stage mainStage;
    private Camera orthCamera;

    @Override
    public void show() {


        orthCamera = new OrthographicCamera();

        mainStage = new Stage(new ScreenViewport());
        mainStage.getViewport().setCamera(orthCamera);

        MyGameActorObject s = new MyGameActorObject();
        s.setPosition(100, 100);

        mainStage.addActor(s);
    }

    @Override
    public void render(float delta) {

        Gdx.gl.glClearColor(0,0,0,1); //sets clear
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        processKeyboardInput();

        mainStage.act(delta);
        mainStage.draw();
    }

    private void processKeyboardInput()
    {
        if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
            orthCamera.translate(-30, 0, 0);
            orthCamera.update();
        }
    }

    @Override
    public void resize(int width, int height) {

    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {
        mainStage.dispose();
    }
}

我试图通过键盘输入来解决2d游戏世界的问题。

这是自定义Actor对象的内容:

public class MyGameActorObject extends Actor
{
    @Override
    public void act(float delta) {
        super.act(delta);
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {

        super.draw(batch, parentAlpha);

        ShapeRenderer r = new ShapeRenderer();

        r.begin(ShapeRenderer.ShapeType.Filled);
        r.setColor(Color.RED);
        r.circle(this.getX() - 50.0f, this.getY() - 50.0f, 100.0f);
        r.end();

    }
}

2 个答案:

答案 0 :(得分:2)

我相信我必须添加类似

的内容
r.setProjectionMatrix(batch.getProjectionMatrix());

在我的自定义actor对象中。所以我对象的绘制函数现在就是。

    @Override
    public void draw(Batch batch, float parentAlpha) {

        super.draw(batch, parentAlpha);

        ShapeRenderer r = new ShapeRenderer();

        r.setProjectionMatrix(batch.getProjectionMatrix());
        r.begin(ShapeRenderer.ShapeType.Filled);
        r.setColor(Color.RED);
        r.circle(this.getX() - 50.0f, this.getY() - 50.0f, 100.0f);
        r.end();

    }

答案 1 :(得分:0)

我认为您的问题是您没有设置InputProcessor

Gdx.input.setInputProcessor(...)是您正在寻找的方法。将其放在show()方法中,并将其传递给InputProcessor引用。 InputProcessor是一个接口,它遍历所有不同类型的基于点击的输入,并允许您确定其中发生的事情。例如:

@Override
public boolean keyDown(int keycode)
{
    switch(keycode)
    {
        case Keys.D:
            screen.universe.entity_handler.player.moving_right = true;
            break;
        case Keys.A:
            screen.universe.entity_handler.player.moving_left = true;
            break;
        case Keys.SPACE:
            screen.universe.entity_handler.player.jumping = true;
            break;
        ...
   }
   ...
}

上面的代码是InputProcessor的一部分 - 我正在制作的游戏实现类。当按下输入问题时(在这种情况下为keyDown),游戏会查看您的输入按钮(keycode)并通过switch语句发送它。

请注意,您必须为要使用的所有输入事件返回true。这就是此方法的boolean返回值。