Aggiunta di una vista grafica a un sistema

1

Al momento ho un programma in Java che simula i movimenti ferroviari. In sostanza, i treni arrivano su piattaforme, raccolgono e rilasciano passeggeri, e quindi procedono, rispettando la segnalazione laddove possibile. Tuttavia, al momento questo esiste solo nello stato del programma, e non c'è una vera e propria vista grafica di tutto ciò che accade.

Sarebbe molto più utile se si potesse vedere un diagramma della linea ferroviaria e su dove c'erano i treni. Per fare questo, tutto ora deve avere coordinate (x, y) in relazione allo JPanel in modo che possano essere disegnate. Ci sono probabilmente altri campi e metodi utili che sarebbero utili in termini di rappresentazione dello stato attuale.

Vedo due opzioni principali:

  • Semplicemente gettando tutto nelle classi originali. Tuttavia, non mi piace perché non è una proprietà di un treno che esiste in (2, 3) su un JPanel arbitrario, che sembra essere una rappresentazione.

  • Creazione di una classe Visualizer per ogni classe che deve essere disegnata, quindi ci sarebbe una classe TrainVisualizer , una classe PlatformVisualizer , ecc. e tutte queste classi erediterebbero da una classe generica Visualizer che gestirà le coordinate e così via. Il problema con questo è che ogni volta che creo qualcosa, fondamentalmente devo creare sia la cosa originale (cioè il treno), sia il visualizzatore. Questo mi sembra il pattern MVC, ma non l'ho mai capito del tutto, e sembra un po 'unideale dover avere due classi per praticamente tutto.

Quale sarebbe il modo migliore di aggiungere questo al programma esistente?

    
posta Samuel Front 10.01.2015 - 11:42
fonte

1 risposta

1

A livello di progettazione hai un paio di opzioni:

  1. Ogni tanto ridisegna l'intero mondo
  2. Ridisegna il mondo intero quando è cambiato
  3. Ogni tanto verifica se il mondo è cambiato o meno. Se è così ridisegna il mondo intero.
  4. Se qualcosa cambia, ridisegna le parti del mondo interessate
  5. Ogni tanto verifica le modifiche e ridisegna solo le parti del mondo interessate.

Ogni opzione ha i suoi effetti positivi e negativi:

  1. Ridisegnare il mondo intero consente di risparmiare tempo speso per capire le aree interessate.
  2. Il ridisegno di parti del mondo consente di risparmiare tempo speso per il rendering
  3. Il ridisegno a ogni modifica darà un rapido feedback allo spettatore
  4. Ridisegnando le modifiche in batch si accumulano le modifiche nella stessa area e le si disegna in un colpo solo.

Il modo per selezionare una di queste opzioni è capire (prima un'ipotesi, misurando in seguito) la dimensione del mondo, il numero di modifiche, il tempo speso per il rendering, il tempo necessario per i calcoli, il lag minimo richiesto / frame rate .

Non è difficile costruirli, l'unica cosa che potrebbe avere un impatto enorme è una notifica per modifica / area in quanto comporterà un sacco di segnalazioni tra Modello e Vista.

Ogni tanto eseguo il ridisegno a schermo intero e vedo se è abbastanza buono perché è più semplice da implementare.

Se non è sufficiente, rendilo più intelligente.

Il disegno a schermo intero potrebbe essere implementato da un visitatore che visita la struttura del mondo (o una sua copia che rappresenta un momento nel tempo) e lo dipinge.

Per l'area painting potresti fare qualcosa di simile. Non è necessario inserire tutto il codice del disegno nel modello, questo è il lavoro della vista.

    
risposta data 11.01.2015 - 17:42
fonte

Leggi altre domande sui tag