Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-08-2008, 14:56   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
TypeError: Error #1010: Ein Begriff ist nicht definiert und hat keine Eigenschaft

Hallo User,
in diesem Skript liegt mein Problem :

Code:
this["clipLoader" + i ].contentLoaderInfo.addEventListener(Event.COMPLETE, clipComplete);
function clipComplete(event:Event){
      MovieClip(event.target.content).gotoAndStop(40);   //Stoppen der Animation       nachdem geladen
      trace(event.target.content);
      /*****************Testcode*****************/
      this["hitbox" + i].addEventListener(MouseEvent.MOUSE_OVER, playClip)
      function playClip(event:Event){
     }
     /*****************Testcode-Ende*****************/
}
ohne den Testcode funktionierts ... das Problem liegt sicher in

Code:
this["hitbox" + i].addEventListener(...)
ich verweise da sicher völligst falsch, nur leider weiss ich nicht ganz wie ich von da wieder an die hitbox rankomme -.-*

Hier mal das ganze Skript :

Code:
/*Skript zur dynamischen Erstellung eines Menüs
Dieses Skript :
- lädt externe Daten
- schreibt diese in ein Array, dessen Elemente durch "," getrennt sind
- generiert Buttons in einer Schleife, welche der Anzahl der Elemente des Arrays entsprechend oft, durchlaufen wird
***********************************************************
1.Die Buttons bestehen aus :
- einer Hitbox
- einer Beschriftung
- einer Animation

1.1.Die Beschriftung (label)
- wird aus einer externen Datei gelesen und erhält eine Textformatierung
1.2.Die Hitbox :
- ist ein rechteckiger nicht sichtbarer Bereich im Hintergrund
- reagiert auf Mouseevents
- Mouseover => Animation abspielen
- Klick => Verweis ********************IN ARBEIT******************************
1.3.Die Animation :
- wird direkt nach laden gestoppt
- stammt aus einer externen *.swf Datei
- wird nur durch den Mouseover-Event in der Hitbox gestartet ********************IN ARBEIT******************************
*/

/* Import der benötigten Klassen */
import flash.events.*;
import flash.net.*;
import flash.display.MovieClip;                    
import flash.text.TextField;
import flash.text.TextFormat;
import flash.display.Sprite;
import flash.geom.Rectangle;
/* Ende des Imports */



var xy:int;   //Testzähler

/* Laden externer datei mit Variablen zur Beschriftung der Textfelder */<
var reques:URLRequest= new URLRequest("extern.txt") // Request Instanz für URL der externen Daten
var loader:URLLoader = new URLLoader();            // Loader Instanz für Datentransfer erstellt
loader.addEventListener(Event.COMPLETE,completeHandler); // Eventlistener für Ende des Datentransfers erstellt
loader.load(reques);                            // Loader angewiesen Daten zu laden   



/* Hauptfunktion um Buttons zu erstellen (dyn. Generierung von Textfeld hitbox und Animation */<   
function completeHandler(event:Event){               //Funktion wird bei beendetem Datentransfer gestartet
   
   /* Initialisierung der benötigten Variablen */
   var vars:URLVariables = new URLVariables(loader.data);  // Variablen (buttonLabel) aus den externen Daten
   var labelsave = vars.buttonLabel;                  // Variablen in labelsave sichern
   var labelArray:Array = vars.buttonLabel.split(",");      // Array erstellen, Elemente durch "," getrennt
   var i:int;                                    // Schleifenzähler initialisiert
   /* In jedem Zyklus der Schleife wird für jedes Arrayelement ein Button erstellt (hitbox, Text, Animation)*/
   for (i=0; i<labelArray.length; i++){               // Schleife zur Erstellung der Textfelder
            
            
      
         /*1.1. Textfeld */
         this["labelText" + i] = new TextField();  //Textfeldinstanz auf der Bühne mit dynamischen Namen erstellen
      
         /* Textpositionierung und Formatierung */
         var labelTextFormat:TextFormat = new TextFormat();  // Textformatinstanz erstellen
         labelTextFormat.font = "Arial CE";                  
         labelTextFormat.color = 0xFFFFFF;              
         labelTextFormat.size = 16;

         /* Eigenschaften der einzelnen Textfelder werden über einen dynamisch generierten Namen (zB labeltext0)
         festgelegt) */
         this["labelText" + i].selectable = false;
         this["labelText" + i].y = (30*i)+20;
         this["labelText" + i].x = 20;
         this["labelText" + i].text = labelArray[i];
         this["labelText" + i].width = 130;
         this["labelText" + i].height = 20;
         this["labelText" + i].setTextFormat(labelTextFormat);          
         this["labelText" + i].antiAliasType = AntiAliasType.ADVANCED;
         addChild(this["labelText" + i]); // Instanz der Textfelder auf Bühne erstellen
         /* Ende Textfeld*/
         
         

         /*1.2. hitbox */
         this["hitbox" + i] = new Sprite();            // hitbox für Mouseevent erstellt und dynamisch benannt
         
         /* Beschreibung grafische Eigenschaften Hitbox */
          this["hitbox" + i].graphics.beginFill(0xFFFFFF, 0);
          // this["hitbox" + i].graphics.lineStyle(0, 0x666666);
            this["hitbox" + i].graphics.drawRect(20, (30*i)+15, 130, 30);
          this["hitbox" + i].graphics.endFill();
          addChild(this["hitbox" + i]);
         
         /*Listener + MausEvent Verarbeitung für hitbox*/<
         this["hitbox" + i].addEventListener(MouseEvent.CLICK, link)
         function link(pEvent:MouseEvent){
            xy++;
            trace("Ready" + xy);
            navigateToURL( new URLRequest("http://www.google.de") , "_self"  );
         }      
         /* Ende hitbox */
         
         
                  
         /* 1.3. Animation für Button (externe SWF datei Laden) */<
           var request:URLRequest = new URLRequest("nurbogen.swf");
         this["clipLoader" + i] = new Loader();
         this["clipLoader" + i].load(request);
         addChild(this["clipLoader" + i]);
         
         /* Positioniernung der Animationen */
         this["clipLoader" + i].y = (30*i)+8;
         this["clipLoader" + i].x = 10;
         
         var help;
         
         /* Event Abschluss nutzen um in der clipComplete funktion die Animation zu stoppen */
         this["clipLoader" + i].contentLoaderInfo.addEventListener(Event.COMPLETE, clipComplete);
         function clipComplete(event:Event){
            MovieClip(event.target.content).gotoAndStop(40);   //Stoppen der Animation nachdem geladen
            trace(event.target.content);
            /*****************Testcode*****************/
            this["hitbox" + i].addEventListener(MouseEvent.MOUSE_OVER, playClip)
            function playClip(event:Event){
            }
            /*****************Testcode-Ende*****************/
         }
               
               
         trace(i +":" + labelArray[i]); // keine Funktion ausser Test => Schleifendurchgangsnummer + Buttonname
      } //for-Schleife Ende
   } //function completeHandler Ende
Ich würd mich freuen wenn mir jemand helfen könnte !
Danke schonmal für entstandene Mühen

mfg ben
Angehängte Dateien
Dateityp: zip 20080814 - 1429.zip (20,7 KB, 0x aufgerufen)
Ben_FF ist offline   Mit Zitat antworten
Alt 14-08-2008, 15:08   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Die Variable i ist in der Funktion "clipComplete" nicht bekannt, somit kannst du diese auch nicht nutzen.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 14-08-2008, 17:47   #3 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
Hmm clipComplete befindet sich doch auch noch im completeHandler wie alles andere auch. Und ich habs auch schon mit this.hitbox0.addEventListener versucht ... wollte er auch nicht :/
Ben_FF ist offline   Mit Zitat antworten
Alt 15-08-2008, 08:19   #4 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
ich habe die Variable i mal an der Stelle über folgenden Code ausgeben lassen:

Code:
MovieClip(event.target.content).gotoAndStop(40);   //Stoppen der Animation       nachdem geladen
      trace(event.target.content);
trace(i);

      /*****************Testcode*****************/
Die Variable ist zwar vorhanden ... aber sie hat immer den Wert 5, sllerdings wird die Funktion doch auch in der for Schleife ausgeführt !?
Ben_FF ist offline   Mit Zitat antworten
Alt 15-08-2008, 10:05   #5 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Zitat:
Zitat von Ben_FF Beitrag anzeigen
ich habe die Variable i mal an der Stelle über folgenden Code ausgeben lassen:
Die Variable ist zwar vorhanden ... aber sie hat immer den Wert 5...
Richtig, da nach ende der Schleife, diese den Wert 5 hat.

Zitat:
sllerdings wird die Funktion doch auch in der for Schleife ausgeführt !?
Nein, du definierst diese in der for-Schleife, ausgeführt wird diese erst, wenn das gewünschte Objekt geladen wurde.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 15-08-2008, 10:32   #6 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
Das ist mir jetzt leider auch bewusst geworden ...

habe versucht nur die Teilfunktion in einem Skript zu verwirklichen mit

Code:
var i:uint;
var request:URLRequest = new URLRequest("nurbogen.swf");
var clipLoader:Loader = new Loader();
clipLoader.load(request);
clipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, clipComplete);
function clipComplete(event:Event){

	for (i=0; i<5; i++){

		trace(i);
		var anAnimation = MovieClip(event.target.content);
		addChild(anAnimation);
		anAnimation.gotoAndStop(40);
		anAnimation.x = 40;
		anAnimation.y = (30*i)+8;
		trace(anAnimation);	
		
		}
}
Aber was genau läuft hier schief ?
So wie ich das verstehe ist das Event fertig wenn ich die Schleife Aufrufe... Das Ergebnis ist leider nur die Darstellung der letzten Instanz ...
eigentlich wollte ich aber 5 instanzen generieren,positionieren und erstmal stoppen.
Angehängte Dateien
Dateityp: zip loader_test.zip (9,9 KB, 0x aufgerufen)
Ben_FF ist offline   Mit Zitat antworten
Alt 15-08-2008, 10:39   #7 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Du solltest eventuell auch mal verstehen, was du da schreibst.
In deinem Code willst du ein Objekt 5 mal adden, das geht so leider nicht, da es ja nur einmal existiert.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 15-08-2008, 11:08   #8 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
Naja ich weiss das ich noch keinen Durchblick habe .... ist ja auch das erste Skript das ich geschrieben habe ...

Also so wie ich es verstanden habe erstelel ich das Objekt ja mit :

Code:
var anAnimation = MovieClip(event.target.content);
über addChild erstelle ich dann die Instanz !?

ich habe das Skript also jetzt so geändert

Code:
var i:uint;
var request:URLRequest = new URLRequest("nurbogen.swf");
var clipLoader:Loader = new Loader();
clipLoader.load(request);
clipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, clipComplete);
function clipComplete(event:Event){
	
	var anAnimation:MovieClip = new MovieClip();
	anAnimation = event.target.content;

	for (i=0; i<5; i++){

		trace(i);
		addChild(anAnimation);
		anAnimation.gotoAndStop(40);
		anAnimation.x = 40;
		anAnimation.y = (30*i)+8;
		trace(anAnimation);	
		
		}
}
Also quasi die Erstellung des Objekterstellung vor die for-Schleife und die Erstellung der Instanz in die Schleife. Das erwünsche Ergebnis habe ich trotzdem nicht, also mache ich noch immer was falsch.
Ben_FF ist offline   Mit Zitat antworten
Alt 15-08-2008, 11:47   #9 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Zitat:
Also so wie ich es verstanden habe erstelel ich das Objekt ja mit :

Code:
var anAnimation = MovieClip(event.target.content);
Nein, das Objekt ist bereits vom Player selber erstellt worden.
An dieser Stelle weist du es nur einer Variable zu.
Somit kannst du es über diese ansprechen aber ein neues hast du somit nicht erstellt.

Zitat:
über addChild erstelle ich dann die Instanz !?
Nein, hier fügst du nur den Inhalt der Variable in die DisplayList.
Das heißt ab hier rendert der Flashplayer dein Objekt auch visuell.
__________________
ERROR: Signature is too large

Geändert von rendner[i] (15-08-2008 um 12:40 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 15-08-2008, 12:10   #10 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
Das bedeutet ich muss mein Objekt duplizieren ?
Ben_FF ist offline   Mit Zitat antworten
Alt 15-08-2008, 12:43   #11 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Du musst es 5 mal laden. Wenn es nur eine Grafik ist, könntest du ein Bitmap davon erstellen.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 15-08-2008, 13:40   #12 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
Ok, danke

Es handelt sich um eine Flash-Animation.

Wenn ich 5 mal lade muss ich ja auch 5 mal auf das COMPLETE Event warten.

Code:
var 	i:	uint;
var 	request:URLRequest = new URLRequest("nurbogen.swf");
var 	clipLoader:Loader = new Loader();

for (i=0; i<5; i++){

	clipLoader.load(request);
	clipLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, clipComplete);

	function clipComplete(event:Event)
	{	
		var anAnimation:MovieClip = new MovieClip();
		anAnimation = event.target.content;

		trace(i);
		anAnimation.gotoAndStop(40);
		anAnimation.x = 40;
		anAnimation.y = (30*i)+8;
		addChild(anAnimation);
		trace(Event.COMPLETE);
        }
}
Ich lade jetzt 5 mal allerdings kommt wieder nur der letzte Clip und ich bekomme in der Ausgabe nur den letzten trace und den letzten CLip zu sehen.

Meine Vermutung ist das ich entweder was mit Event oder Schleife etwas falsch mache, oder das es mit :

Code:
anAnimation = event.target.content;
zusammenhängt da es sich da ja nur um eine Referenz zu vermutlich ein und dem selben Objekt handelt ?!
Ben_FF ist offline   Mit Zitat antworten
Alt 15-08-2008, 13:51   #13 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Ein loaderObject kann nur eine Datei laden und nicht alle 5.
Und das ist auch Schwachsinn:
PHP-Code:
var anAnimation:MovieClip = new MovieClip();
        
anAnimation event.target.content
Da du denn erstellten MovieClip ja gar nicht nutzt.
__________________
ERROR: Signature is too large

Geändert von rendner[i] (15-08-2008 um 13:53 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 15-08-2008, 13:58   #14 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
Ich sehe schon das ich noch eine Menge lernen muss

Vielen Dank für deine Geduld schonmal !
Ben_FF ist offline   Mit Zitat antworten
Alt 15-08-2008, 14:15   #15 (permalink)
Neuer User
 
Registriert seit: Aug 2008
Beiträge: 11
So funtzts =)

Code:
var		a:	uint;
var 	i:	uint;
var 	request:URLRequest = new URLRequest("nurbogen.swf");

for(a=0; a<5; a++){
	this["clipLoader" + a] = new Loader();
	this["clipLoader" + a].load(request);
	this["clipLoader" + a].contentLoaderInfo.addEventListener(Event.COMPLETE, clipComplete);
}

	function clipComplete(event:Event)
	{	
		var anAnimation = MovieClip(event.target.content);
		i++;
		trace(i);
		anAnimation.gotoAndStop(40);
		anAnimation.x = 40;
		anAnimation.y = (30*i)+8;
		addChild(anAnimation);
		trace(Event.COMPLETE);
        }
Zumindest für sich stehend ... hoffentlich auch im Zusammenhang mit dem Rest des Skripts oben.

Danach möchte ich noch meine hitboxen mit einem Event verknüpfen das die Clips steuert ... und davor hab ich jetzt schon Angst =)

VIELEN DANK FÜR DEINE HILFE !!!!

Ben_FF 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 03:29 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele