¿Hay una manera estándar para manejar muchas opciones diferentes para los eventos del ratón en Java?

StackOverflow https://stackoverflow.com/questions/1241633

  •  12-09-2019
  •  | 
  •  

Pregunta

Estoy desarrollando un juego de simulación basada en Java de cuadrícula, y me preguntaba si hay una forma estándar de hacer lo siguiente. Tengo un panel que es el panel de juego, y hay muchas cosas diferentes que podría suceder cuando se hace clic en el panel. Por ejemplo, en la construcción de una habitación, hay varias etapas, donde arrastrando el ratón y el botón izquierdo tendrá diferentes acciones. En este momento, la forma en que lo he hecho, es el uso de booleanos para comprobar lo que se está construyendo, y luego en qué etapa se encuentra en.

¿Hay alguna forma mejor o estándar de manejar algo como esto? Tenía un Google rápido, pero como he dicho antes, la gente en desbordamiento de pila siempre dará una mejor y más relevante, hasta la fecha respuesta.

Me considero todavía bastante nuevo en java.

Gracias de antemano.

¿Fue útil?

Solución

Es posible que intente buscar en algo similar al patrón de estrategia.

Básicamente, se inicia haciendo clic en el botón de espacio en la barra de herramientas. La barra de herramientas pasa a través de la red y le dice a utilizar el 'lugar' habitación ActionListener. Es de suponer que la eliminación de cualquier oyente acción anterior que estaba escuchando

La casa Habitación ActionListener, a su vez poner en práctica toda la parte interesante de la lógica de clic izquierdo / derecho, arrastrar, etc.

Si tiene varias etapas para la construcción de una habitación (por ejemplo, colocación de puertas, ventanas y luego, después de trampa puertas); los oyentes de acción serían responsables de la entrega de control fuera a la siguiente etapa: un poco de una máquina de estados finitos.

Por lo tanto, se inicia pulsando 'espacio' botón, se añade 'sala de lugar' oyente. Arrastra el área que desea que la habitación, 'sala de lugar' modifica el estado del juego, a continuación, cambia el ActionListener al oyente las ventanas 'lugar'. ad infinitum ... hasta que termine.

Uno (no compilable) ejemplo muy simple:

class GridPanel extends JPanel
{
    void SetMouseListener(MouseListener newListener)
    {
        for(MouseListener ml : getMouseListeners())
            removeMouseListener(ml);
        addMouseListener(newListener);
    }
}

class ControlPanel extends JPanel
{
    GridPanel gameGrid;

    void OnRectangleButtonClicked(some stuff)
    {
        gameGrid.SetMouseListener(new PlaceRoomListener(gameGrid));
    }
}

class PlaceRoomListener extends MouseAdapter
{
    GridPanel gameGrid;

    //constructor, etc

    void OnClick(mouse event)
    {
        gameGrid.doCoolStuff();
        gameGrid.SetMouseListener(new PlaceTrapDoorListener());
    }
}

//etc

Ahora, ese ejemplo no compilables lado, Pyrolistical tiene un punto: por lo general, no desea combinar su modelo de juego y la interfaz gráfica en una sola pegote de clases. Desea que el modelo separado de la interfaz gráfica de usuario, y para manipularlo a través de una interfaz bien definida.

(También, hay probablemente mejores métodos para ir sobre la eliminación de la escucha del ratón a continuación, sólo la eliminación de todos los oyentes al azar ... yo estaba en un poco de prisa, lo siento)

Otros consejos

Parece que usted necesita definir su modelo de juego / estado y mantenerlo separado de sus acciones del ratón.

¿Está utilizando MVC?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top