La creazione di un pool separato per ogni singola immagine png nella stessa classe è appropriata?

0

Sono forse ancora un po 'ecocompatibile sul pooling di oggetti, e voglio assicurarmi che qualcosa del genere sia un modello di sound design prima di iniziare realmente. Prendi il seguente codice (che usa il framework Starling in ActionScript 3):

[Embed(source = "/../assets/images/game/misc/red_door.png")]
private const RED_DOOR:Class;

private const RED_DOOR_TEXTURE:Texture = Texture.fromBitmap(new RED_DOOR());

private const m_vRedDoorPool:Vector.<Image> = new Vector.<Image>(50, true);
.
.
.
public function produceRedDoor():Image
{
    // get a Red Door image
}

public function retireRedDoor(pImage:Image):void
{
    // retire a Red Door Image
}

Tranne che ci sono quattro colori: rosso, verde, blu e giallo. Quindi ora abbiamo una piscina separata per ogni colore, una funzione di produzione separata per ogni colore e una funzione separata di ritiro per ogni colore. Inoltre ci sono diversi elementi nel gioco che seguono questo modello a 4 colori, quindi per ognuno di essi abbiamo quattro pool, quattro funzioni di produzione e quattro funzioni di ritiro.

Ci sono più colori coinvolti nelle immagini che non solo il loro predominante, quindi provare a lanciare tutte le porte, ad esempio, in un unico pool, e quindi modificare le loro proprietà dei colori in giro non funzionerà. Anche la non esistenza della parola chiave static è dovuta alla sua lentezza in AS3.

È questo il modo giusto di fare le cose?

Modifica

Un singolo pezzo del puzzle è se dovrei provare a gettare tutti questi pool nella stessa classe, con funzioni completamente nuove e tutto per ogni pool. Questo è in qualche modo correlato a un'altra domanda che ho chiesto di recente. Anche se la risposta accettata di quella domanda non ha necessariamente affrontato questo particolare scenario, ottenere più classi, variabili, astrazioni, ecc. e quando si sta tentando di fare qualcosa come il pooling di oggetti, non sono sicuro che se la realizzazione di un progetto di classe come quello introdurrà un sovraccarico "troppo". Questa è solo una parte individuale di quello che sto chiedendo, poiché la domanda è in definitiva molto più generale.

    
posta Panzercrisis 04.11.2013 - 04:41
fonte

1 risposta

1

Se disponi di un pool {Red,Green,Blue,Yellow} Door e un pool {Red,Green,Blue,Yellow} Window , varrebbe la pena scegliere un'astrazione appropriata: le variabili sono il tipo di elemento (porta o finestra) e il colore.

Un Pool ha un colore, una classe oggetto e una collezione di immagini. Ha anche metodi produce e retire . Ad esempio (passaggio a Java, perché generici):

Pool<Door> redDoorPool = new Pool<Door>(Color.RED);
Image redDoor = redDoorPool.produce();

Potresti quindi creare una classe ColorPool che raggruppa quattro Pool s insieme:

class ColorPool<T> {
  public final red    = new Pool<T>(Color.RED);
  public final green  = new Pool<T>(Color.GREEN);
  public final blue   = new Pool<T>(Color.BLUE);
  public final yellow = new Pool<T>(Color.YELLOW);
}

Considera l'utilizzo del Pattern composito qui. Inoltre, utilizza gli accessor invece dei campi pubblici nel codice reale ...

Quindi:

ColorPool<Door> doorPool = new ColorPool<Door>();
Image redDoor = doorPool.red.produce();

Ora abbiamo estratto con successo tutti i pezzi variabili nei tuoi pool, e né le informazioni sul tipo, né le informazioni sul colore fanno parte del nome del metodo.

Nota che i generici non sono strettamente necessari per il funzionamento di questo progetto: l'ho usato solo qui per rendere chiare le relazioni.

    
risposta data 04.11.2013 - 08:27
fonte

Leggi altre domande sui tag