Antworten auf deine Fragen:
Neues Thema erstellen

Dokumentenklasse fehlerhaft?!

noob69

Noch nicht viel geschrieben

Hallo,

nachdem mir schon bei ein paar Themen hier im Forum ziemlich toll geholfen wurde, stellt sich mir hier die nächste Frage.......bin halt immer noch ein Noob, siehe mein Nick :D

Folgender Sachverhalt:

Ich hab nun von der Möglichkeit gehört meine *.Fla fast vollständig von Actionscript zu 'befreien', in dem ich die gesamten Klassen mit ihren Funktionen in eine externe Dokumentenklasse auslagere.
Ich habe diese jetzt im gleichen Verzeichnis (parsenGanzSimpel/global.as) wie meine *.Fla (parsenGanzSimpel/global.fla) untergebracht. In den Veröffentlichunsgeinstellungen habe ich danach die Klasse bei den Actionscript-Einstellungen eingetragen.

Dann habe ich meine Klasse in ein Package verstaut und sowohl die Klasse als auch die Funktion als 'public' deklariert.

Das ganze sollte nun eigtl eine XML parsen und mir den ausgelesen Text in einem dynamischen Textfeld (Instanzname = Frage_Fenster) in meiner *.Fla anzeigen... tut es aber nicht...

(Hat aber funktioniert, solange ich den gesamte AS-Teil in meiner Fla hatte?)


ActionScript in meiner Fla
PHP:
import flash.display.*;
import flash.events.*;
include "global.as"
//import global

/*habe ich ausgklammert, da bei import die klasse und die funktionen wohl nicht gefunden werde?!?, mit dem include befehl kommt allerdings keine fehlermeldung beim kompilieren.... */

            //textfeld definineren
            var Frage_Fenster:TextField = new TextField();
            
            var loader:URLLoader = new URLLoader();
            var request:URLRequest=new URLRequest("config.xml");
            request.method=URLRequestMethod.POST;
            loader.load(request);
            loader.addEventListener(Event.COMPLETE, completeHandler);
            
            trace(xml.Frage1)
ActionScript in meiner Dokumentenklasse global.as
PHP:
package {
    import flash.display.*;
    import flash.events.*;
    
    public class global extends Sprite{
        
        public function completeHandler(event:Event):void {
            var xml:XML=XML(loader.data);
            addChild(Frage_Fenster);
            Frage_Fenster.autoSize=TextFieldAutoSize.LEFT;
            //trace(xml.Frage1);
            Frage_Fenster.text=xml.Frage1;
            Frage_Fenster.border=true;
            Frage_Fenster.width=150;
            Frage_Fenster.height=40;
            Frage_Fenster.x=100;
            Frage_Fenster.y=125;
            //auf zwei Zeilen splitten
            Frage_Fenster.wordWrap=false;
            TextFormatAlign.CENTER;

        }
    }
}
und meine XML, falls die überhaupt was zur Sache tut...
PHP:
<config>
    <Frage1>Warum ist das Textfeld nicht im dynamischen Textfeld?</Frage1>
    <Antwort1>Weil du es einfach noch nich drauf hast</Antwort1>
    <Antwort2>Antwort2</Antwort2>
    <Details>
        <Beschreibung_x>Beschreibung_1</Beschreibung_x>
        <Beschreibung_y>Beschreibung_2</Beschreibung_y>
    </Details>
</config>
Es treten komplett keine Fehlermeldungen auf beim Kompilieren... aber es kommt auch nichts an....?! Was läuft hier verkehrt? hab ich die ganze Sache evtl falsch verstanden?
 
Zuletzt bearbeitet:

A

ADcosmos

Guest

AW: Dokumentenklasse fehlerhaft?!

Hi,

ich hab mal Deinen Code verbessert:


1. Dokumentenklasse Global (Grossgeschrieben. Klassen WERDEN mit großem Anfangsbuchstaben geschriebven

Code:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.net.*; //Fuer URLLoader, URLRequest
	import flash.text.*; //Fuer TextField und TextFieldAutoSize
    
    public class Global extends Sprite{
        
	protected var frageFenster_txt:TextField; //sollten klein geschrieben werden. _txt ist die Endung für Textfelder (Muss man aber nicht nutzen)
	
	//Konstruktor: Ist der Einstieg in die Klasse
	//Hier solltest Du alles setzen, nicht im completeHandler
	public function Global(){
		var loader:URLLoader = new URLLoader();
		loader.addEventListener(Event.COMPLETE, completeHandler);
		loader.load(new URLRequest("config.xml"));
		frageFenster_txt = new TextField();
		frageFenster_txt.autosize =TextFieldAutoSize.LEFT;
		frageFenster_txt.border=true;
		frageFenster_txt.width=150;
		frageFenster_txt.height=40;
		frageFenster_txt.x=100;
		frageFenster_txt.y=125;
		//Sicher, kein Zeilenumbruch?
		frageFenster_txt.multiline=true; //Wenn das TxtField mehrere Zeilen haben soll
		frageFenster_txt.wordWrap=false; //Dann sollte hier aber true sein
		stage.addChild(frageFenster_txt);
	}
	
        public function completeHandler(event:Event):void {
            var xml:XML=XML(event.target.data);
            frageFenster_txt.text=xml.Frage1;
        }
    }
}

Ich hab es zwar nicht getestet, es sollte aber funktionieren.

MFG ADcosmos
 
Zuletzt bearbeitet von einem Moderator:

noob69

Noch nicht viel geschrieben

AW: Dokumentenklasse fehlerhaft?!

Hey,

danke für deine Antwort...hab den Klassennamen & den Namen vom dynamischen Textfeld angepasst.... ....funktioniert aber leider nicht....er scheitert beim preloader...
1046: Typ wurde nicht gefunden oder war keine Kompilierungszeit-Konstante: URLLoader.
1180: Aufruf einer möglicherweise undefinierten Methode addFrameScript.
1180: Aufruf einer möglicherweise undefinierten Methode URLLoader.
1180: Aufruf einer möglicherweise undefinierten Methode URLRequest.
1120: Zugriff auf eine nicht definierte Eigenschaft loader.

:(

der hinweis mit dem konstruktor macht aber sinn, werd ich mir für die zukunft merken ..
 
A

ADcosmos

Guest

AW: Dokumentenklasse fehlerhaft?!

Hi,

1. Woher kommt denn die Methode addFrameScript?

2. Pack mal bitte ganz oben bei dem import-Anweisungen noch dazu ein

import flash.net.*;

Der URLLoader, URLRequest sind nämlich in dem Package beheimatet.

Du musst in einer Dokumentenklasse alle Klassen importieren, die nicht auf der obersten Ebene liegen. D.h. Array, Object, int und so musst Du nicht importieren. MovieClip, Textfield, URLLoader hingegen schon. Das ist normal bei Dokumentenklassen. In Flash (die fla-Datei) selbst brauchst Du die import-Anweosungen nicht, aber in den as-Dateien.

MFg ADcosmos
 

noob69

Noch nicht viel geschrieben

AW: Dokumentenklasse fehlerhaft?!

hey,

ja das mit den packages habe ich auch vorhin rausgefunden =) ... hab jetzt selber noch ein bischen rumegschraubt

in meiner fla steht jetzt nichts mehr, mein as-code sieht mittlw so aus und lässt beim kompilieren keine fehler mehr raus

PHP:
package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.net.*;

    public dynamic class Unbenannt extends Sprite {

        public var frageFenster_txt:TextField;
        //Konstruktor
        public function Unbenannt() {
            var loader:URLLoader = new URLLoader();
            var xml:XML=XML(loader.data);
            loader.addEventListener(Event.COMPLETE, aufruf);
            loader.load(new URLRequest("config.xml"));
            frageFenster_txt = new TextField();
            frageFenster_txt.autoSize = TextFieldAutoSize.LEFT;
            frageFenster_txt.border=true;
            frageFenster_txt.width=150;
            frageFenster_txt.height=40;
            frageFenster_txt.x=100;
            frageFenster_txt.y=125;
            //Sicher, kein Zeilenumbruch?
            frageFenster_txt.multiline=true;//Wenn das TxtField mehrere Zeilen haben soll
            frageFenster_txt.wordWrap=false;//Dann sollte hier aber true sein
            stage.addChild(frageFenster_txt);
        }

        public function aufruf(event:Event):void {
            var loader:URLLoader = new URLLoader();
            var xml:XML=XML(loader.data);
            frageFenster_txt.text=(xml.config.Frage1+trace("123"));
            
        }
    }
}
trotzdem kommt nichts im textfeld an, da steht nur undefined drin?!^^ der trace-befehl kommt aber durch

achja ich hab mal die funktions und klassennamen geändert, weil ich das ganze mal in einem neuen projekt aufgemacht habe... um einstellungsfehler von vorherigen versuchen auszuschließen
 
Zuletzt bearbeitet:
A

ADcosmos

Guest

AW: Dokumentenklasse fehlerhaft?!

Hi,

zur letzten Methode:

Code:
 public function aufruf(event:Event):void {
            [COLOR="Red"]var loader:URLLoader = new URLLoader();[/COLOR]//Das hast Ihr eigentlich nichts zu suchen, also loeschen
            var xml:XML=XML(event.target.data);
           [COLOR="Red"] trace(xml); //Gibt er Dir etwas aus?
            frageFenster_txt.text=xml.Frage1; //kein trace bitte, kein xml.config.Frage1[/COLOR]

        }

Bei dem Zugriff auf deine XML-daten. Das erste Objekt der XML-Datei (bei Dir "config") wird beim Aufrufen nicht zuggriffen. Das Element brauchst Du nicht hinschreiben.

Also nicht
xml.config.Frage1

sondern

xml.Frage1


MFG ADCosmos
 
Zuletzt bearbeitet von einem Moderator:

noob69

Noch nicht viel geschrieben

AW: Dokumentenklasse fehlerhaft?!

Hi,

zur letzten Methode:

Code:
 public function aufruf(event:Event):void {
            [COLOR=Red]var loader:URLLoader = new URLLoader();[/COLOR]//Das hast Ihr eigentlich nichts zu suchen, also loeschen
            var xml:XML=XML(event.target.data);
           [COLOR=Red] trace(xml); //Gibt er Dir etwas aus?
            frageFenster_txt.text=xml.Frage1; //kein trace bitte, kein xml.config.Frage1[/COLOR]

        }
Bei dem Zugriff auf deine XML-daten. Das erste Objekt der XML-Datei (bei Dir "config") wird beim Aufrufen nicht zuggriffen. Das Element brauchst Du nicht hinschreiben.

Also nicht
xml.config.Frage1

sondern

xml.Frage1


MFG ADCosmos
hey danke für deine schnell antowort..is echt nett von dir, dasd du dich da mit mir durchboxt :p ich hab das jetzt nochmal angepasst

also bei 'trace(xml)' spuckt er gar nichts aus (extrem merkwürdig) und bei ' frageFenster_txt.text=xml.Frage1' oder 'frageFenster_txt.text=xml' auch nicht

auch mit ner neuen 'vereinfachten' xml (unbenannt.xml, liegt im gleichen verzeichnis wie der gesamte rest... und beinhaltet nur folgenden code
PHP:
<Frage1>Warum ist das Textfeld nicht im dynamischen Textfeld?</Frage1>
will er nichts ausgeben...

 
A

ADcosmos

Guest

AW: Dokumentenklasse fehlerhaft?!

Hi,

jetzt habe ich es mal getestet:

1. Die XML-Datei. Ich hab Sie geändert. Du möchtest ja am Ende mehrere Fragen wahrscheinlich haben.

Code:
<configuration>
	<config>
		<Frage>Warum ist das Textfeld nicht im dynamischen Textfeld?</Frage>
		<Antwort1>Weil du es einfach noch nich drauf hast</Antwort1>
    		<Antwort2>Antwort2</Antwort2>
		<Details>
			<Beschreibung_x>Beschreibung_1</Beschreibung_x>
			<Beschreibung_y>Beschreibung_2</Beschreibung_y>
		</Details>
	</config>
	<config>
		<Frage>Warum ist das Textfeld nicht im dynamischen Textfeld?</Frage>
		<Antwort1>Weil du es einfach noch nich drauf hast</Antwort1>
    		<Antwort2>Antwort2</Antwort2>
		<Details>
			<Beschreibung_x>Beschreibung_1</Beschreibung_x>
			<Beschreibung_y>Beschreibung_2</Beschreibung_y>
		</Details>
	</config>
</configuration>

2. Die as-Datei. Bei mir heißt die Klasse XMLQuest. Das müsstest Du dann nur ändern.

Code:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.net.*; //Fuer URLLoader, URLRequest
	import flash.text.*; //Fuer TextField und TextFieldAutoSize
    
    public class XMLQuest extends Sprite{
        
	protected var frageFenster_txt:TextField; //sollten klein geschrieben werden. _txt ist die Endung für Textfelder (Muss man aber nicht nutzen)
	
	//Konstruktor: Ist der Einstieg in die Klasse
	//Hier solltest Du alles setzen, nicht im completeHandler
	public function XMLQuest(){
		var loader:URLLoader = new URLLoader();
		loader.addEventListener(Event.COMPLETE, completeHandler);
		loader.load(new URLRequest("config.xml"));
		frageFenster_txt = new TextField();
		frageFenster_txt.autoSize=TextFieldAutoSize.LEFT;
		frageFenster_txt.border=true;
		frageFenster_txt.width=150;
		frageFenster_txt.height=40;
		frageFenster_txt.x=100;
		frageFenster_txt.y=125;
		//Sicher, kein Zeilenumbruch?
		frageFenster_txt.multiline=true; //Wenn das TxtField mehrere Zeilen haben soll
		frageFenster_txt.wordWrap=false; //Dann sollte hier aber true sein
		stage.addChild(frageFenster_txt);
	}
	
        public function completeHandler(event:Event):void {
            var xml:XML=XML(event.target.data);
			trace(xml);
            frageFenster_txt.text=xml.config[0].Frage;//Zugriff auf das erste "config"-Element
        }
    }
}

MFG ADCosmos
 

noob69

Noch nicht viel geschrieben

AW: Dokumentenklasse fehlerhaft?!

Hi,

jetzt habe ich es mal getestet:


hey... und bei dir gings?
hab alles angepasst.... dann kommt bei mir in der ausgabe

PHP:
ReferenceError: Error #1056: Eigenschaft frageFenster_txt in XMLQuest kann nicht erstellt werden.
    at flash.display::Sprite/constructChildren()
    at flash.display::Sprite()
    at XMLQuest()
muss ich vllt bei den veröffentlichungseinstellungen iwas anpassen? ich arbeite mit flash cs4.. aber da dürfte es ja eigtl nicht dran liegen, oder?


EDIT:

ich habs!!! :)


die class musste dynamic sein.... son kleiner fehler... so grße wirkung :D

dickes danke AdCosmos, ohne dich wäre ich nie soweit gekommen...


also nochmal der ganze funktionierende as-code der dokumentenklasse 'Unbenannt.as'

PHP:
package {
    import flash.display.*;
    import flash.events.*;
    import flash.net.*; //Fuer URLLoader, URLRequest
    import flash.text.*; //Fuer TextField und TextFieldAutoSize
    
    public dynamic class Unbenannt extends Sprite{
        
    protected var frageFenster_txt:TextField; //sollten klein geschrieben werden. _txt ist die Endung für Textfelder (Muss man aber nicht nutzen)
    
    //Konstruktor: Ist der Einstieg in die Klasse
    //Hier solltest Du alles setzen, nicht im completeHandler
    public function Unbenannt(){
        var loader:URLLoader = new URLLoader();
        loader.addEventListener(Event.COMPLETE, completeHandler);
        loader.load(new URLRequest("config.xml"));
        frageFenster_txt = new TextField();
        frageFenster_txt.autoSize=TextFieldAutoSize.LEFT;
        frageFenster_txt.border=true;
        frageFenster_txt.width=150;
        frageFenster_txt.height=40;
        frageFenster_txt.x=100;
        frageFenster_txt.y=125;
        //Sicher, kein Zeilenumbruch?
        frageFenster_txt.multiline=true; //Wenn das TxtField mehrere Zeilen haben soll
        frageFenster_txt.wordWrap=false; //Dann sollte hier aber true sein
        stage.addChild(frageFenster_txt);
    }
    
        public function completeHandler(event:Event):void {
            var xml:XML=XML(event.target.data);
            trace(xml);
            frageFenster_txt.text=xml.config[0].Frage;//Zugriff auf das erste "config"-Element
        }
    }
}
config.xml
PHP:
<configuration>
    <config>
        <Frage>Warum ist das Textfeld nicht im dynamischen Textfeld?</Frage>
        <Antwort1>Weil du es einfach noch nich drauf hast</Antwort1>
            <Antwort2>Antwort2</Antwort2>
        <Details>
            <Beschreibung_x>Beschreibung_1</Beschreibung_x>
            <Beschreibung_y>Beschreibung_2</Beschreibung_y>
        </Details>
    </config>
    <config>
        <Frage>Warum ist das Textfeld nicht im dynamischen Textfeld?</Frage>
        <Antwort1>Weil du es einfach noch nich drauf hast</Antwort1>
            <Antwort2>Antwort2</Antwort2>
        <Details>
            <Beschreibung_x>Beschreibung_1</Beschreibung_x>
            <Beschreibung_y>Beschreibung_2</Beschreibung_y>
        </Details>
    </config>
</configuration>
in der 'Unbenannt.fla' datei ist lediglich ein dynamisches Textfeld mit dem namen 'frageFenster_txt'

:)
 
Zuletzt bearbeitet:
A

ADcosmos

Guest

AW: Dokumentenklasse fehlerhaft?!

Hi,

bei mir funktioniert es ohne dynamic. Siehe .

Und dass Du nur ein Textfeld hast ist klar, ich wollte Dir aber nur gleich zeigen, wie es aussieht, wenn Du zwei Elemente in der XML-Datei hast.

MFg ADcosmos
 

noob69

Noch nicht viel geschrieben

AW: Dokumentenklasse fehlerhaft?!

Is ja lustig :p

ja deine files funktionieren ohne dynamic... jetzt hab ich die beiden verglichen.... und wohl den unterschied gefunden

ich hatte in meiner fla auf der bühne manuell ein dynamisches textfeld erzeugt, du lässt es erzeugen....frag mich nich was da den unterschied macht.. aber hauptsache es funktioniert... wie gesagt DANKE
 
A

ADcosmos

Guest

AW: Dokumentenklasse fehlerhaft?!

Hi,

da gibt es einen Unterschied, besser mehrere:

1. Wenn das TxtFeld (oder ein anderes Objekt) auf der Bühne schon ist, dann brauchst Du ja kein stage.addChild(txt) mehr.

2. Wenn das TxtFeld auf der Bühne ist, dann erstellt Du ja kein neues mehr. Also "new TextField()" wäre dann sinnlos.

3. Wenn das TxtFeld auf der Bühne ist, dann muss die Variable public sein. In meinem Beispiel habe ich Sie protected, weil Flash Sie nicht kennen muss.

MFG ADcosmos
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.621
Beiträge
1.538.378
Mitglieder
67.545
Neuestes Mitglied
helenkitina
Oben