Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 469
Micah Carrick Avatar asked Sep 19 '12 00:09

Micah Carrick


1 Answers

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.

like image 79
idanakav Avatar answered Oct 18 '22 02:10

idanakav