Christopher Townsend
Christopher Townsend

Reputation: 1746

LIBGDX Camera doesn't move

My game sets this screen and I see the actor that I create.

However can anyone tell me why the camera doesn't seem to be moving? I would expect the actor to move to the right as I pressed the Left key.

The Gdx.input.isKeyPressed(Input.Keys.LEFT) does resolve to true and the translate function does get called.

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();
    }
}

I am trying to acheieve being able to pan around the 2d game world using keyboard input.

This is the contents of the custom Actor object:

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();

    }
}

Upvotes: 1

Views: 342

Answers (2)

Christopher Townsend
Christopher Townsend

Reputation: 1746

I believe I have to add something like

r.setProjectionMatrix(batch.getProjectionMatrix());

in my custom actor object. So the draw function on my object would now be.

    @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();

    }

Upvotes: 2

Lee Presswood
Lee Presswood

Reputation: 210

I think your problem is that you haven't set the InputProcessor.

Gdx.input.setInputProcessor(...) is the method you're looking for. Put it in your show() method and pass it an InputProcessor reference. InputProcessor is an interface that goes through all the different types of click-based input and allows you to determine what happens in them. So for instance:

@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;
        ...
   }
   ...
}

The above code is part of an InputProcessor-implementing class for a game I'm making. When the input in-question is pressed (keyDown in this case), the game looks at your input button (the keycode) and sends it through the switch statement.

Keep in mind that you must return true for all the input events that you want to use. That's what the boolean return value for this method is.

Upvotes: 0

Related Questions