Micah Carrick
Micah Carrick

Reputation: 10197

Cannot get events working in my libgdx Actor

I'm having a hard time getting events working with my Actor in libgdx. I'm using nightly builds.

My stage is setup in the show() method of a Screen subclass:

stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true);
Gdx.input.setInputProcessor(stage);  
TestActor actor = new TestActor(); 
stage.addActor(actor);

And my actor class looks like:

class TestActor extends Actor {
    private Sprite sprite;
    private TextureAtlas atlas; 

    public TestActor() {   
        atlas = new TextureAtlas(Gdx.files.internal("textures/images-packed.atlas"));
        sprite = atlas.createSprite("logo-96");

        setTouchable(Touchable.enabled);
        addListener(new InputListener() {
            public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
                Gdx.app.debug(TestGame.TAG, "TestActor.touchDown()");
                return true;  // must return true for touchUp event to occur
            }
            public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
                Gdx.app.debug(TestGame.TAG, "TestActor.touchUp()");
            }
        });
    }

    @Override
    public void draw(SpriteBatch batch, float parentAlpha) {
        Color color = getColor();
        batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
        batch.draw(sprite, getX(), getY());
    }            
}

The events don't seem to fire. Oddly enough, I've used built-in UI widgets like the TextButton and can get those events to fire just fine. Can anybody see what I'm doing wrong?

Upvotes: 13

Views: 7559

Answers (1)

idanakav
idanakav

Reputation: 1486

You should also setBounds to your actor. best way to do it (if you want the same size as your texture) add these lines to your constructor :

setWidth(sprite.getWidth());
setHeight(sprite.getHeight());
setBounds(0, 0, getWidth(), getHeight());

notice you can also set the location of the bounds with the first 2 parameters.

Upvotes: 16

Related Questions