代码之家  ›  专栏  ›  技术社区  ›  mcfly soft

对Inputlistener LIBGDX感到困惑

  •  1
  • mcfly soft  · 技术社区  · 6 年前

    我有

    • 主测试类创建阶段,向阶段添加参与者,并将Inputprocessor设置为阶段

    • 添加了几个参与者的扩展组类。在组的构造函数中,我添加了一个InputListener。

    InputListener未被激发。有人能告诉我为什么不能和怎么做吗?

    public class Test extends ApplicationAdapter implements ApplicationListener {
    
        public void create() {
            stage = new Stage(new ScreenViewport());
            specialScene = new SpecialScene();
            stage.addActor(specialScene);    
        Gdx.input.setInputProcessor(stage);
    
        }
    
    
    }
    
    
    public class SpecialScene extends com.badlogic.gdx.scenes.scene2d.Group {
        public SpecialScene {
            <add some actors ...>
            addListener(specialListener);       
        }
    
        private static InputListener specialListener = new InputListener() {
            public boolean touchDown (InputEvent event, float x, float y, int pointer, int button)        {
                return true; //or false
            }
    
            @Override
            public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
                super.touchUp(event, x, y, pointer, button);
            }
    
            @Override
            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
                super.enter(event, x, y, pointer, fromActor);
            }
        };
    
    }
    

    我发现了问题。听众没有找到我的演员的任何区域。 我必须用setBounds()明确地设置区域。

    我的问题解决了,但我仍然感到困惑。为什么我必须自己设定界限。我相信,在未来的每个演员身上,我都会忘记这一点,因为这对我来说是不合逻辑的。是我必须这样做,还是我对这个概念理解错误?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tenfour04    6 年前

    组是一个骨架类,可用于开发您自己的功能,因此它不假定任何东西,甚至不假定其子角色对其边界的贡献方式(例如,您可能有一些不想贡献的参与者,因为它们是一种视觉效果,比如粒子。)您可以扩展组来创建自己的基类以满足您的需要。

    那么为什么LibGDX还没有包含这样的类呢?在LibGDX中,Stage主要用于UI系统。尽管它被设计为可扩展到各种用途,但它只包含一个框架供您使用,除非您使用的是基于它的完全烘焙的UI实现。该UI实现确实包含一个名为WidgetGroup的Group子类,它实现了您所期望的边界。

    几年前,Stage的作者IIRC在libgdx.com上写了一篇博文,讨论了他如何尝试使用Stage来玩一款简单的果酱游戏,并基本上得出结论,这会导致他的游戏更加复杂,或者至少编码更耗时。

    我个人用它做了一个回合制的果酱游戏,这很好。我使用动作系统来制作游戏片段的动画过渡。但我认为这会使实时游戏比创建适合您特定游戏的组织结构更复杂。如果您正在创建一个更复杂的游戏,您可以查看用于LibGDX的Ashley插件。