Android LibGDX-在不调用“单击”事件的情况下更改ImageButton的状态

Android LibGDX-在不调用“单击”事件的情况下更改ImageButton的状态,android,libgdx,imagebutton,Android,Libgdx,Imagebutton,在LibGDX中,我有一个带有单击事件的ImageButton myBtn.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { checkIfOtherButtnsPressed() } }); 我有一些按钮,我在CheckIfOtherButtonSpressed中所做

在LibGDX中,我有一个带有单击事件的ImageButton

myBtn.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            checkIfOtherButtnsPressed()
        }
    });
我有一些按钮,我在CheckIfOtherButtonSpressed中所做的是检查其他按钮的状态,如果一个按钮被按下,而另一个按钮也处于活动状态,我会将其状态更改为

selected = false;
问题是在将其状态从active更改为not active之后,它也会调用事件,就像我在它上“Clike”一样,然后我再次进入CheckIfOtherButtonSpress


我可以在不解除单击事件的情况下更改按钮状态吗?或者我可以从什么情况下识别“单击”吗?

我不知道libgdx的正确方法名称,但简单的逻辑是,在更改状态时应该删除侦听器,并在更改状态后再次设置侦听器

myBtn.addListener(null);
myBtn.setSelected([true|false]);
myBtn.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            checkIfOtherButtnsPressed()
        }
    });

除此之外,您还可以使用一个图像,这也是一种演员类型,并采取可绘制的,每当其他演员点击时,您可以更改您的图像可绘制


您可以按照上面名为changeIfOtherButtonPressed的方法更改drawable。

我建议在Android上使用Libgdx功能。Libgdx提供了绕过应用程序的物理按钮方面的方法。 首先,您需要创建一个sprite并将其加载到任何类的onCreate方法中,该类@override会覆盖扩展Libgdx游戏类的主类。这将加载sprite,准备将其调用到渲染器方法中,然后需要为渲染器指定spritebatch,并从中调用draw方法以指定坐标

SpriteBatch batcher;
Batcher.draw(x, y, width, height) Documentation for [drawing][1]
然后为按钮指定一个边界矩形。当用户触摸屏幕上与您的按钮位置相匹配的某个点时,您的监听器将被触发

if (Gdx.input.justTouched()) {
    guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0));
            if (pauseBounds.contains(touchPoint.x, touchPoint.y)) {
                SoundHandler.playSound(SoundHandler.clickSound);
                state = ConstantsHandler.GAME_PAUSED;
                return;
            }
        }
从Libgdx提供的SuperJumper演示中获取的一个片段将为您提供处理基于图形的事件的良好起点。使用实现了Android当前库的Libgdx方法总是更好的,因为Android有各种方法与Libgdx类不兼容,这会导致不必要的调试或将来应用程序崩溃

这不是解决当前问题的方法,而是帮助解决未来问题的另一种方法

if (Gdx.input.justTouched()) {
    guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0));
            if (pauseBounds.contains(touchPoint.x, touchPoint.y)) {
                SoundHandler.playSound(SoundHandler.clickSound);
                state = ConstantsHandler.GAME_PAUSED;
                return;
            }
        }