Questo approccio indicizzato allo sviluppo di giochi java rts è valido e come posso migliorarlo?

1

Ho una classe GameState progettata per contenere una matrice di giocatori, un Array di StarSystems e alcuni altri campi che devono persistere dal salvataggio al salvataggio. Ogni GameObject tiene traccia del proprio ID, che è anche il suo indice nel suo array e l'id dei relativi oggetti di gioco.

public class GameState implements Json.Serializable
{
    private Array<StarSystem> systems;
    private Array<Player> players;

    //Methods used to access data and some utilities
}

Ogni StarSystem nella GameState memorizza un Array di Planet e una Stella o tre, che a loro volta contengono informazioni su temperatura e abitabilità. Class Star si estende dal pianeta e ha 0 abitabilità. La classe StarSystem ha anche riferimenti a tutte le flotte presenti nel sistema, i loro proprietari. La classe Fleet contiene un elenco di istanze Ship presenti nella flotta e le informazioni pertinenti per ogni nave.

Ho progettato questo sistema per due motivi:

  1. Volevo essere in grado di chiamare 'Json.toJson (Object)' una volta quando salvo il gioco invece di passare e salvare ogni oggetto singolarmente.
  2. Prima di questo il mio codice era molto disorganizzato e avevo strani riferimenti a varie cose disseminate nel codice. Questo è più pulito.

Sfortunatamente questo ha anche abbassato il FPS dal 35-40 al 20-25, il che mi fa schifo e probabilmente ticcherebbe anche qualsiasi utente. In altre parole, sto chiedendo come posso migliorare questo design?

Note: la natura indicizzata indica che per un Planet.ProductionQueue per aggiungere un nuovo Fighter a Fleet SomeFleet di Player A, deve prima chiamare GameInstance.getInstance().getState().getSystem(parent_system).getFleet(fleet_target_id).addShip(new Fighter(owner_id, getLeastPowerfulCommandShip().getID()))

Nota che sto usando anche libGdx e che la classe Json di cui ho parlato fa parte della libreria.

    
posta the_OTHER_DJMethaneMan 26.05.2016 - 02:44
fonte

1 risposta

3

Il problema non è la gerarchia del tuo gioco, il problema è che stai discendendo l'intera gerarchia per ogni richiesta.

Immagino che i giocatori guardino un singolo sistema alla volta e che un giocatore "selezioni" una flotta per aggiungervi un combattente.

Pertanto, memorizza le variabili locali: StarSystem current e Fleet selected Aggiorna queste variabili quando il giocatore cambia la flotta / sistema stellare corrente. Non è necessario scendere l'intera gerarchia per accedere a un oggetto.

Nota: gli oggetti selezionati dovrebbero ancora essere memorizzati nelle strutture dati che hai citato.

    
risposta data 26.05.2016 - 04:54
fonte

Leggi altre domande sui tag