Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-08-2011, 08:34   #1 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Referenzen auf geladene Assets wo speichern?

Wo speichert Ihr Eure Referenzen auf nachgeladene Assets(Bilder, Sounds, etc) einer Anwendung? Haben Eure Value Objects, die auch eine grafische Representanz haben, ein eigenes Attribute
Code:
asset:DisplayObject
?
malthoff ist offline   Mit Zitat antworten
Alt 04-08-2011, 08:36   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.379
Ich implementiere oft ein Repository, dass ich in die Views injecte.
Omega Psi ist offline   Mit Zitat antworten
Alt 04-08-2011, 08:49   #3 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Und wie bringst Du die Assets dann wieder mit den Value Objects in Verbindung? Speicherst Du eine intern hochzählende ID an den VO's ?
malthoff ist offline   Mit Zitat antworten
Alt 04-08-2011, 08:58   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.379
Ich versuche IDs so gut es geht zu vermeiden. In der Regel verwende ich das Objekt selbst als Schlüssel. Natürlich komme ich dann über das Datum an die URL des Assets.
Omega Psi ist offline   Mit Zitat antworten
Alt 04-08-2011, 09:01   #5 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
danke
malthoff ist offline   Mit Zitat antworten
Alt 04-08-2011, 09:14   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.379
Bitte.
Omega Psi ist offline   Mit Zitat antworten
Alt 04-08-2011, 09:43   #7 (permalink)
Singleton
 
Registriert seit: Mar 2009
Ort: Berlin / Hamburg
Beiträge: 497
... und jetzt noch ein Codebeispiel
__________________
digitale-avantgarde.com
shredding ist offline   Mit Zitat antworten
Alt 04-08-2011, 09:45   #8 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Ja, wenn ich damit fertig bin - ich hoffe, ich denke dran
malthoff ist offline   Mit Zitat antworten
Alt 05-08-2011, 07:27   #9 (permalink)
Developer
 
Benutzerbild von malthoff
 
Registriert seit: Sep 2001
Ort: Stuttgart
Beiträge: 519
Ich habe jetzt eine funktionierende Lösung. Die Assets lasse ich laden und habe dann einen Assetpool, der eigentlich nur aus einem Dictonary und zwei darauf arbeitenden Methoden besteht. Der AssetPool hält eine Verbindung zwischen einem geladenen Asset und einem beliebigen Objekt. In meinem Fall habe ich die Verbindung zwischen dem Asset und dem dazugehörigen Value Object gemacht.

Das Value Objekt:
PHP-Code:
public class ProductEntryVO
    
{
        public var 
productName:String;
        public var 
teaserURL:String;
        public var 
price:String;
        
        public function 
ProductEntryVO() {}    
    } 
Das Laden der Assets habe ich erst Mal als Funktionalität im Model. Wenn alle Assets geladen sind wird folgende Methode aufgerufen:
PHP-Code:

private var objRefDict:Dictionary = new Dictonary(); // field in model
private var assetPool:AssetPool = new AssetPool(); // field in model


private function onAssetsLoaded(e:QueueCompleteEvent):void 
        
{
            
// save loaded asset in asset pool, which are then accessible via object reference
            
for (var i:int 0e.loadedAssets.lengthi++) 
            {
                var 
ass:LoadedAsset LoadedAsset(e.loadedAssets[i]);
                
assetPool.addAsset(objRefDict[ass._id], ass._asset);
            }
        } 
Hier ist ein unschöner Zwischenschritt notwendig, der aber mit dem AssetPool als solchem nichts zu tun hat. Ich musste mir von meiner LoadingQueue Implementierung für jedes zu ladene Asset eine individuelle ID zurückgeben lassen, die ich dann wiederum in einem Dictonary (objRefDict) speichere. Nach dem Laden gibt mir die LoadingQueue das Asset und die generierte ID zurück womit ich die Verbindung zwischen ValueObject und geladenem Asset herstellen kann. Darauf wird erst das ValueObject inkl. geladenem Asset in den Assetpool gesteckt:
PHP-Code:
assetPool.addAsset(objRefDict[ass._id], ass._asset); 
Hier noch die AssetPool Klasse, die zwar jetzt noch sehr klein ist, die ich aber aus Erweiterungsgründen als eigenständige Klasse implementiert habe:
PHP-Code:
public class AssetPool extends EventDispatcher
    
{
        
        private var 
dict:Dictionary;

        public function 
AssetPool() 
        {
            
dict = new Dictionary();
        }
        
        public function 
addAsset(objRef:*, asset:DisplayObject):void {
            
dict[objRef] = asset;
        }
        
        public function 
getAssetByObject(obj:*):DisplayObject {
            return 
dict[obj];
        }
    } 
Man kann ein geladenes Asset dem AssetPool hinzufügen und gibt gleichzeitig ein Objekt beliebigen Types mit, woraufhin beide per Dictonary Eintrag verbunden werden. An beliebiger anderer Stelle in der Anwendung kann dann über den AssetPool auf das Asset zugegriffen werden - wenn man eine Reference des verbundenen Objekts hat.

Ich bin mir selber noch nicht klar darüber, ob der Aufbau gut und sinnvoll ist denn:
Ich habe durch die Verbindung mit einer echten Objektreferenz den Aufbau eines ID Systems gespart, das finde ich soweit gut, wenn ich auch noch nicht weiß, wie sich das auswirkt, da ich an jeder Stelle, wo ich das Asset benutzen möchte, die Referenz auf das verbunde Objekt brauche. Außerdem ist der erwähnte Zwischenschritt beim Laden wieder ID basiert, aber ich glaube, da komm ich nicht drum herum.

Wie sehen die anderen den Aufbau?

Geändert von malthoff (05-08-2011 um 07:29 Uhr)
malthoff ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
asset, bilder, preload

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash MX 2004] Extern geladene SWF's in Hauptfilm speichern ohne Pfadverknüpfungen alex_di Flash Einsteiger 5 18-05-2009 22:32
XML, geladene Daten in _root-Var speichern? Pixelflow ActionScript 1 3 01-11-2005 18:32
extern geladene mcs speichern?! s@mmy Flash 4 und Flash 5 12 04-05-2004 21:08
Geladene Variablen eines LoadVars() Objektes in ein Array speichern LisTenEr ActionScript 1 2 05-03-2004 15:38


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele