Confundido acerca de Inputlistener libgdx

votos
1

yo tengo

  • Clase de prueba principal de la creación de un escenario, Adición de un actor para el escenario y el establecimiento de la Inputprocessor a la etapa

  • extendido Grupo Clase con varios actores añadió. En el constructor del Grupo I añadido un InputListener.

El InputListener no se dispara. ¿Puede alguien explicar por qué no y cómo hacerlo?

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

}

* ACTUALIZACIÓN *

He encontrado el problema. El oyente no se encontró ninguna región de mis actores. Tengo que establecer explícitamente la Región con setBounds ().

Mi problema está resuelto, pero todavía estoy confundido. ¿Por qué tengo que fijar los límites a mí mismo. Voy a olvidar esto con cada actor en el futuro estoy seguro, porque es ilógico para mí. ¿Es esta la forma que tengo de, o puedo entender el concepto erróneo?

Publicado el 27/11/2018 a las 16:58
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Group es una clase de esqueleto que se puede utilizar para desarrollar su propia funcionalidad, por lo que no supone nada, ni siquiera la forma en que sus niños actores contribuyen a sus límites. (Por ejemplo, es posible que tenga algunos actores que no desea contribuir, ya que son un gesto visual, como partículas.) Puede ampliar Grupo para crear su propia clase base para adaptarse a sus necesidades.

Así que ¿por qué no libgdx ya incluyen una clase de esa manera? En libgdx, Stage se utiliza principalmente para el sistema de interfaz de usuario. A pesar de que fue diseñado para ser extensible a todo tipo de propósitos, sólo incluye un marco para que hagas eso, a menos que utilice la aplicación de interfaz de usuario totalmente cocido que se basa en ella. Que la aplicación de interfaz de usuario sí incluye una subclase de grupo llamado WidgetGroup, que hace lo que se espera con los límites.

IIRC, el autor de la etapa escribió una entrada de blog hace unos años en libgdx.com discutir cómo trató usando la etapa para el juego de un simple atasco de juego, y, básicamente, llegó a la conclusión de que hizo que su juego sea más complicado, o al menos más tiempo con el código.

Yo personalmente he utilizado durante un juego basado en turnos de mermelada, y que era bueno para eso. He utilizado el sistema de acciones para tener buenas transiciones animadas de las piezas del juego. Pero creo que sería un juego en tiempo real más complicado que crear su propia estructura de la organización que se adapta a su juego en particular. Si va a crear un juego más complicado, debes revisar el plugin para Ashley libgdx.

En cualquiera de los casos, que sin duda se debe utilizar para la materia de interfaz gráfica de usuario, ya que es totalmente implementado y un enorme ahorro de tiempo.

Respondida el 28/11/2018 a las 15:32
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more