Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-01-2012, 13:12   #1 (permalink)
Neuer User
 
Benutzerbild von flash_newbie
 
Registriert seit: Feb 2007
Beiträge: 174
Exclamation SWC FlashDevelop + getDefinitionbyName

Hi,
wollte das nur mal festhalten (auch für mich):

Wenn man FlashDevelop benutzt und aus einer .swc dynamisch Instanzen generieren will, muss beim Hinzufügen (in Flash Develop Rechtsklick auf swc -> Add To Library, danach nochmal Rechtsklick darauf und unter Options
"Included Library (include completly)" ausgewählt sein. Ansonsten gibts folgenden Fehler:
"[Fault] exception, information=ReferenceError: Error #1065: Variable XYZ is not defined."

Hintergrund: Standardmäßig wird nur das eingebunden, was auch wirklich referenziert wurde (Library (include referenced classes))


Also falls ihr sowas verwendet und mit FD arbeitet, sicherstellen, dass die komplette SWC importiert wurde.

PHP-Code:
            var letterRef:Class = getDefinitionByNamepath ) as Class;
            var 
letterSprite:Sprite = new letterRef(); 
Inwieweit dieses dynamische Typisieren sich negativ auf die Performance auswirkt, werd ich dann noch merken (ios Projekt...)

Geändert von flash_newbie (20-01-2012 um 13:14 Uhr)
flash_newbie ist offline   Mit Zitat antworten
Alt 20-01-2012, 13:30   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Wenn du einen Typ aus einer SWC referenzierst, musst du ihn auch in die SWF kompilieren. Für gewöhnlich geschieht das automatisch, da die import Direktive den Katalog von Klassen erzeugt, die in die SWF sollen. Da du über getDefinitionByName keine Klasse direkt verwendest, werden diese auch nicht gelinkt.

Über Compiler Argument kann man das aber steuern. Da musst du aber mal die Referenz konsultieren, das hab ich gerade nicht im Kopf.
Omega Psi ist offline   Mit Zitat antworten
Alt 20-01-2012, 13:33   #3 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Wieso verwendest Du nicht einfach sauber referenzierte Klassennamen?

Dynamische Konstruktionen wie getDefinitionByName sind doch nur potentielle FehlerQuellen?! Und da man die Klassennamen in der IDE eh alle händisch vergeben muss, sehe ich nicht wo da der Vorteil liegt?!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 20-01-2012, 13:45   #4 (permalink)
Neuer User
 
Benutzerbild von flash_newbie
 
Registriert seit: Feb 2007
Beiträge: 174
@Martin
es handelt sich um ein Basisklasse mit Animationen die mit zusätzlichen Grafikattributen ausgestattet werden soll. Dies soll möglichst universell und dynamisch sein (es gibt ca. 40 Möglichkeiten, wie sie kombiniert wird).
Ich glaube, dass ich so mit der dyn. Typisierung das für mich am einfachsten lösen kann. Aber vielleicht ist das auch Unsinn.
Bin mal gespannt ob das so funtkionietrt wie ich es mir vorstell.

Geändert von flash_newbie (20-01-2012 um 13:57 Uhr)
flash_newbie ist offline   Mit Zitat antworten
Alt 21-01-2012, 13:05   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Naja, die Fehler kann man ja schon arg einschränken und auch über Caching die Zugriffszeiten optimieren (ich hab da aber auch keine Benchmarks zu):
Code:
const _cache:Object = {};
function getNewInstanceFrom(qualifiedClassName:String):Object
{
  var ClassDef:Class
  if (_cache[qualifiedClassName])
  {
    ClassDef = _cache[qualifiedClassName] as Class
    return new ClassDef();
  }

  ClassDef = getDefinitionByName(qualifiedClassName) as Class;
  if (!ClassDef)
  {
    throw new ArgumentError('Could not find Class for name '+ qualifiedClassName);
  }

  return new (_cache[qualifiedClassName] = ClassDef)();
}
Omega Psi ist offline   Mit Zitat antworten
Alt 22-01-2012, 11:22   #6 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
@Omega Psi:
Was einen aber immer noch nicht des Problems entledigt, die so generierten Instanzen dann auf irgendwas casten zu müssen um damit arbeiten zu können. Auf Object oder * zu typisieren ist mir persönlich ein Graus und zudem ein Einfallstor für Laufzeitfehler

Ich bleibe daher dabei: Man sollte, wo immer möglich, auf solche dynamischen Konstruktionen verzichten und stattdessen die Klassen sauber statisch referenzieren.


@flash_newbie:
Zitat:
Zitat von flash_newbie Beitrag anzeigen
@Martin
es handelt sich um ein Basisklasse mit Animationen die mit zusätzlichen Grafikattributen ausgestattet werden soll. Dies soll möglichst universell und dynamisch sein (es gibt ca. 40 Möglichkeiten, wie sie kombiniert wird).
Beschreib mal genauer, was Du damit meinst! Da gibt es bestimmt eine besere Lösung
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (22-01-2012 um 11:26 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 22-01-2012, 17:08   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Es geht doch nur um die Generierung von Instanzen. Und das "fehlerfreies" Laufzeitverhalten wird ja nicht durch Compile-Sicherheit gewährleistet, sondern durch Tests und Restriktion der Ein- und Ausgabeparameter für Methoden.
Code:
function getNewSpriteFrom(qualifiedClassName:String):Sprite
{
  const object:Object = getNewInstanceFrom(qualifiedClassName),
        sprite:Sprite = object as Sprite;

  if (!sprite)
  {
    throw new ArgumentError('Instance created from ' + qualifiedClassName + ' is no covariant instance of Sprite');
  }

  return sprite;
}
Also, wenn man solche Mechanismen isoliert, beispielsweise durch eine Factory, implementiert ist das nicht unvernünftig.

Geändert von Omega Psi (22-01-2012 um 17:11 Uhr)
Omega Psi ist offline   Mit Zitat antworten
Alt 22-01-2012, 20:51   #8 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
es handelt sich um ein Basisklasse mit Animationen die mit zusätzlichen Grafikattributen ausgestattet werden soll.
Das Klingt für mich aber eher nach einen Fall für eine vernünftige Komposition, nicht Vererbung+redundantem Code.
(~40 Klassen, die von 1. Basisklasse erben, und nur unterschiedliche Variationen derselben paar Ergänzungen darstellen)

Daher plädiere ich auch für mehr Infos bezüglich der konkreten Anforderung/Implementierung.

Zitat:
Zitat von Omega Psi
Also, wenn man solche Mechanismen isoliert, beispielsweise durch eine Factory, implementiert ist das nicht unvernünftig.
Einverstanden; dem kann ich so zustimmen.
Dennoch tendier ich auch eher dazu solche dynamischen Konstrukte zu vermeiden.
Ich schreib lieber ein statisches Array (eine Whitelist), mit den Klassen die verwendet werden können, als die Klassennamen zusammenzubauen.
Auf diese Weise kann es einfach nicht vorkommen, dass ein Klassenname falsch ist/die dazugehörige Klasse nicht existiert.

Ich bin mir sicher, dass auch dass irgendwo an seine Grenzen stoßen wird, aber da war ich bisher nicht. Und wenn ich mal da lande, weiss ich ja, wo ich nachlesen kann
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 22-01-2012, 21:12   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Aber das ist das gleiche in rot. Ob man nun eine Whitelist verwendet oder sich die Klassennamen an anderer Stelle zusammenbaut. Die Fehlerquellen sind die gleichen und kann man einfach über Unittests abfangen.
Omega Psi ist offline   Mit Zitat antworten
Alt 22-01-2012, 21:24   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Oder nicht?
Omega Psi ist offline   Mit Zitat antworten
Alt 22-01-2012, 22:57   #11 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Die Fehlerquellen kann ich grad nicht abschätzen, die Fehler an sich sind ähnlich. In jedem Fall sind es Laufzeitfehler, die wir beide hier abfangen müssen.

Aber das gleitet in eine Diskussion über persönliche Präferenzen und Programmierstil ab.
Ich wollt nur meinen Senf dazu geben, wie ich an die Sache rangehen würde.

Ob nun das eine, oder das andere. Ich finde hier beides fehl am platz, und wie oben schon geschrieben, hört es sich für mich so an, dass man hier besser das Objekt anhand der Anforderungen zusammenbaut, als dass man hier eine von x "gleichen" Klassennamen zusammenbaut, Klasse raussucht und instanziert.

Gut soweit?

ich finde jetzt ist wieder flash_newbie gefragt; uns noch paar Infos zu dem Konstrukt zu geben, dass er da baut/bauen will. Dafür revanchieren wir und mit Lösungsvorschlägen
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 23-01-2012, 08:20   #12 (permalink)
Odin zum Gruße!
 
Benutzerbild von Oxigan
 
Registriert seit: Nov 2006
Ort: Ösiland
Beiträge: 327
Zitat:
Zitat von Martin Kraft Beitrag anzeigen
Wieso verwendest Du nicht einfach sauber referenzierte Klassennamen?

Dynamische Konstruktionen wie getDefinitionByName sind doch nur potentielle FehlerQuellen?! Und da man die Klassennamen in der IDE eh alle händisch vergeben muss, sehe ich nicht wo da der Vorteil liegt?!
Sehe ich nicht so. Das ist ziemlich essentiell z.B. für den Factory-Pattern. Ich benutze das "relativ" oft. Weil es - sinnvoll eingesetzt - sehr sehr nützlich ist.

LG
__________________
keine PM´s bezüglich Flash-Fragen - dafür haben wir das Forum. Thx.
Oxigan ist offline   Mit Zitat antworten
Alt 23-01-2012, 09:07   #13 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Zitat:
Zitat von thomas_E Beitrag anzeigen
Gut soweit?
Yes
Omega Psi ist offline   Mit Zitat antworten
Alt 23-01-2012, 09:21   #14 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von Oxigan Beitrag anzeigen
Sehe ich nicht so. Das ist ziemlich essentiell z.B. für den Factory-Pattern. Ich benutze das "relativ" oft. Weil es - sinnvoll eingesetzt - sehr sehr nützlich ist.
Nur sollte diese Factory IMHO eben sauber typisierte Instanzen (z.B. Sprites) zurückliefern und keine Klassen von denen keiner weiß, was drinsteckt...


Aber, wie Thomas schon sagte: Es ist jetzt an flash_newbie uns einen tieferen Einblick in das Vorhaben zu gewähren, bei dem wir ihm helfen sollen.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (23-01-2012 um 09:31 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 23-01-2012, 12:45   #15 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Man kann die Factory doch entsprechend implementieren.
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
dynamisch typisieren, flashdevelop, swc

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
FlashDevelop 3.0.0 RTM veröffentlicht marc Nachrichten 0 15-06-2009 11:39
FlashDevelop + SWC silentx Zusatzprodukte 2 29-07-2008 09:56
FlashDevelop 3.0.0 (Beta5) Madokan Nachrichten 0 03-12-2007 10:13
FlashDevelop 3.0.0 (Beta 4) Madokan Nachrichten 0 11-11-2007 08:18
Flashdevelop 3 screamingworld ActionScript 3 20 16-06-2007 22:56


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele