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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-04-2006, 22:10   #1 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
Erstellen einer größeren Applikation | Absturz beim zusammenfügen

Ich arbeite momentan an einer größeren Flash Applikation, die wiederum im prinzip aus kleineren Applikationen besteht.

meine Vorgehensweise war der einfachheit halber für jede einzelne Applikation einen eigenen Ordner im Projektordner anzulegen, der jeweils die fla bzw. swf sowie alle relevanten Klassen beinhaltet. Im Grunde habe ich jedes App wie ein eigenständiges Programm konstruiert.

Nun ist es nicht zuletzt aus Präsentationszwecken an der Zeit die Einzelnen Applikationen zusammenzuführen und mit einem Menü zu versehen.

Ich habe im Projektordner einen neuen Film angelegt, welcher das Menü erzeugt und mit der Funktionalität ausgestattet sein sollte bei klick die einzelnen swf's jeweils zu laden bzw zu entladen, so dass der entsprechende Content angezeigt wird.

Das Problem ist nun folgendes:
beim ersten klick auf einen beliebigen Menübutton wird der entsrechende Film geladen und funktioniert wie er soll.

Wenn man nun allerdings einen 2. Button klickt sollte eigentlich der momentane Content mittels unloadClip entladen werden und daraufhin der neue Content geladen werden. jedoch funktioniert nun keine Applikation mehr, bzw. führt die Applikation keine aktionen mehr aus. sie ist wie tot.
Es wird keine DB verbindung hergestellt keine debug traces werden ausgegeben gar nichts. auch nicht wenn man zu der ersten Applikation zurück klickt.

Ich habe die einzelnen Programme nach MVC Programmiert (nicht strickt)
kann es ein Fehler gewesen sein, dass die Einzelnen Programme jeweils (in ihren ordnern) Klassen einkompiliert haben, welche dieselben Namen haben? (Model Controller ...) und Flash beim nacheinander reinladen der swf's damit nicht zurecht kommt?

Kann mir jemand sagen woran das liegen mag?

und bei der gelegenheit möchte ich euch gerne Fragen, wie Ihr größere Applikationen in Angriff nehmt.

vielen Dank!!!
mojave ist offline   Mit Zitat antworten
Alt 27-04-2006, 01:15   #2 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Ja, das könnte der Fehler sein.
Ich würde jeder Anwendung einen eigenen Namespace spendieren.
mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 27-04-2006, 09:22   #3 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Flashfilme gleicher Versionen die ineinander (wie schreibt man das?) geladen werden, teilen sich ein und das selbe _global-Object, in welchem wiederum Klassen abgelegt werden. Das kann also nicht funktionieren.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 27-04-2006, 10:49   #4 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
vielen dank erstmal..

eine dieser Anwendungen beinhaltet eine art yugoplaufleiste, welche ich irgendwann mal programmiert habe.
zu sehen hier: klick
auch in AS2 Programmiert verwende ich hier allerdings keinerlei Model,View... Klassen.

nun verhält es sich so:
wenn man von dieser Laufleiste zu einem anderem Menüpunkt springt und dann dorthin wieder zurück, wird diese offensichtlich auch nicht mehr initialisiert und die Bilder fahren einfach aus dem Bild anstatt sich ans Ende ranzuhängen.

Wie ist das mit dem gemeinsamen _global Object? werden die gespeicherten Objekte einfach im Speicher gelassen, wenn ich den MC remove oder unloade? kann ich den Speicher löschen?

das Oben beschriebene Problem beschreibt vielleicht, dass es über den Namespace hinaus initialisierungsschwierigkeiten durch chaches gibt.

doch was ist dann die lösung für mein Problem?
(panik
mojave ist offline   Mit Zitat antworten
Alt 27-04-2006, 23:04   #5 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
HÜÜÜÜlfÄÄÄÄÄÄ
mojave ist offline   Mit Zitat antworten
Alt 28-04-2006, 00:31   #6 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
ich habe einen test gemacht, indem ich ein menü mit 2 buttons entworfen habe. der eine button lädt ein swf auf _level1 und der 2. button entlädt diesen wieder.
danach habe ich mir die variablen ausgeben lassen (debuggen->variablen auflisten) und musste feststellen, dass sich tatsächlich noch alles im speicher befindet.:

PHP-Code:
Variable _global.Application = [Funktion '__constructor__']
 
Variable _global.ModelSuper = [Funktion 'ModelSuper']
 
Variable _global.Controller = [Funktion 'Controller'
 
Variable _global.Beliebigeklasse= [Funktion 'Beliebigeklasse']
............... 
was muss ich nun tun um das zu verhindern?

ich habe mich naiv darauf verlassen, dass mit removeMovieClip oder unloadMovie oder gar einen mc auf dieselbe tiefe mit demselben namen zu laden alle relevanten objekte gelöscht werden.

edit: wenn ich dann mit button 1 wieder die applikation auf level1 lade funktioniert diese bnicht mehr..

Geändert von mojave (28-04-2006 um 00:35 Uhr)
mojave ist offline   Mit Zitat antworten
Alt 28-04-2006, 06:30   #7 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Wenn du deine Klassen in verschiedene Packages steckst, sollte es kein Problem geben.

ActionScript:
  1. class anwendung1.Model{
  2. }
  3. class anwendung1.Controller{
  4. }
  5. ...
  6. class anwendung2.Model{
  7. }
  8. class anwendung2.Controller{
  9. }
  10. ...

mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 28-04-2006, 11:43   #8 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
mein beispiel oben bezieht sich allerdings auf nur eine einzige applikation, welche ich lade->entlade->und wieder lade
und dass sie dann nicht mehr funktioniert weil jegliche initialisierung/instanziierung ausbleibt.

so ziemlich der einzige code, welcher in der fla dieses app steht ist
PHP-Code:
Application.main(this); 
schreibe ich einen trace davor:
PHP-Code:
trace("hallo hier bin ich"
wird dieser auch nach dem entladen und wiederladen ausgegeben, nur die Application klasse wird gar nicht mehr instanziiert weil sie sich offensichtlich auch nach removen oder unloaden immer noch im speicher befindet.

und nu?
mojave ist offline   Mit Zitat antworten
Alt 28-04-2006, 19:33   #9 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Ist deine Application-Klasse statisch?
Versuch es mal so:

ActionScript:
  1. private static var application : Application;
  2.  
  3. public static function main( root : Movieclip )
  4. {
  5.      application = new Application();
  6. }

mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D

Geändert von hazy fantazy (28-04-2006 um 19:35 Uhr)
hazy fantazy ist offline   Mit Zitat antworten
Alt 28-04-2006, 19:55   #10 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
@hazy: ja das ist sie.

also, das problem scheint zu sein, dass nach dem entfernen des mc's/level, in den ich die einzelnen applikationen lade das _global object vollgeballert ist mit sämtlichen objekten meiner klassen.
das führt dazu, dass dieselbe applikation beim erneuten laden nicht mehr initialisiert wird.
ein sehr unsauberer lösungsweg ist
PHP-Code:
for(var i in _global){
 
delete(_global[i]);

das würde mich allerdings dazu zwingen dabei eventuell ungenaue abfragen zu machen, da ich ja die objekte des menüs nicht löschen will.
lösung dazu wäre beim menü auf as1 zurückzugreifen und alles in die fla zu schreiben.

eine bessere lösung wäre es allerdings wohl jede klasse mit einer destruktor methode zu bestücken, die beim "austauschen" bzw entladen der applikationen aufgerufen wird.

ich finde das alles recht wackelig. dachte es wäre damit getan den geladenen film zu unloaden/removen. und an selbige stelle einen anderen zu laden

Geändert von mojave (28-04-2006 um 19:57 Uhr)
mojave ist offline   Mit Zitat antworten
Alt 28-04-2006, 21:00   #11 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Das Problem mit der Initialisierung hast du ja nur, weil deine Klassen statisch sind. Würdest du verschiedene Packages und richtige Instanzen benutzen, hättest du das Problem nicht.

Eine mögliche Lösung wäre es vielleicht, dass sich deine Klassen beim Laden bei einem SpeicherManager anmelden, der sie dann beim Entladen des MovieClips wieder aus global entfernt.

Oder du benutzt haxe. Dort hat jeder SWF seinen eigenen Namespace.

mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 29-04-2006, 12:49   #12 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.411
das mit dem speichermanager ist eine gute idee. ich denke, dass ich das so machen werde. dank dir hazy!

allerdings möchte ich die frage nochmal in den raum stellen:

wie ist eure herangehensweise für große projekte?
wie schustert ihr eure sachen zusammen?
mojave ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele