Sto sviluppando un gioco RPG a mattonelle 2D per desktop e (si spera) per Android. Per rappresentare una posizione del riquadro nel gioco, sto utilizzando una classe chiamata Location
, che ha un valore per x
, y
e room
. room
si riferisce al Room
di Location
. Io uso la classe Location
per i calcoli come se una tessera sia passabile o invalicabile, la piastrella che un personaggio sta affrontando, ecc. Inizialmente, ho usato x
, y
e room
valori per le classi di personaggi, oggetti di gioco, ecc., ma hanno deciso di sostituirli con istanze di Location
.
Da qui , qui , e altrove, ho l'impressione che l'istanziazione di questi oggetti Location
più e più volte non sia l'ideale per le prestazioni, specialmente sulle piattaforme Android. Ma sembra anche come mettere in comune (vedi i link) Location
s è troppo lavoro da implementare. Ad esempio, posso ottenere un nuovo Location
da un Location
e un Direction
(un enum) chiamando Location.add(Direction)
che userei nei calcoli del movimento dei personaggi (a seconda di quale Direction
il giocatore sta dirigendo) . Sarebbe estremamente scomodo dover chiamare manualmente "libero" su un oggetto che intendo utilizzare solo in una riga, ad esempio in pseudocodice character.setLocation(character.getLocation().add(character.facingDirection))
versus
var tempLocation = character.getLocation().add(character.facingDirection) // assuming for convenience that the add method uses a global pool of Location s
character.setLocation(tempLocation)
tempLocation.free() // assuming this frees it from the global pool
L'idea di utilizzare una classe Location
invece di x
, y
e room
valori in ogni oggetto pertinente è quella di semplificare il processo di codifica, non di renderlo più complesso. (E, naturalmente, mi sembra il modo "corretto" orientato agli oggetti). Esistono altri modi validi per mantenere prestazioni decenti senza evitare la classe Location
del tutto? Oppure, in questo caso, anche le prestazioni sono un problema in questo caso?
Per motivi di completezza, sto usando Java, Scala e LibGDX.