Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-12-2004, 14:28   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 18
Question Probleme mit Variablen-scope in einer Klasse

Hallo zusammen,

ich stehe vor einem neuen "fundamentalen" Problem. Anbei der Beispielcode meiner Klasse "Shape":

1.) Im AS des entsprechenden Bildes laufe ich über ein Array und instanziere für jedes Element des Arrays ein Objekt der Klasse Shape und übergebe dabei ein paar Werte, die sich jedes Objekt in seinen Member-Variablen merken soll.

2.) Nach dem Instanziieren rufe ich für jedes Objekt die draw()-Methode meiner Klasse auf, in der das übergebende MovieClip (z.B. ein Kreis) dupliziert und die Kopie auf einem höheren Level positioniert wird:

ActionScript:
  1. class anni.Shape {
  2.     static var aant;
  3.     static var azuw;
  4.     static var avol;
  5.        
  6.     static var level = 0;   
  7.        
  8.     var monat;
  9.     var jahr;
  10.     var praeparat;
  11.     var mktant;
  12.     var mktvol;
  13.     var mktzuw;
  14.     var code;
  15.     var gebiet;
  16.    
  17.     function Shape( monat, jahr, praeparat, mktant, mktvol, mktzuw, code, gebiet ) {
  18.         this.monat = monat;
  19.         this.jahr = jahr;
  20.         this.praeparat = praeparat;
  21.         this.mktant = mktant;
  22.         this.mktvol = mktvol;
  23.         this.mktzuw = mktzuw;
  24.         this.code = code;
  25.         this.gebiet = gebiet;
  26.  
  27.     }
  28.    
  29.     function draw( basisFigur_mc ) {
  30.  
  31.         // Annahmen zur Berechnung
  32.                 var w = 300;
  33.         var h = 300;
  34.    
  35.     // neues Level
  36.                 level++;
  37.        
  38.         // duplicate
  39.         var f_mc = basisFigur_mc.duplicateMovieClip("f_mc"+level, level);
  40.  
  41.                 // hier positioniere ich die Kopien wild rum
  42.         f_mc._x = (w/2) + ((mktant/aant - 1) * (w/2) * (2/3));
  43.         f_mc._y = (h/2) - ((mktzuw/azuw - 1) * (h/2) * (2/3));
  44.         f_mc._width = mktvol/avol * (((w+h)/2)/10);
  45.         f_mc._height = mktvol/avol  * (((w+h)/2)/10);
  46.  
  47.         _root["f_mc"+level]._visible = true;
  48.        
  49.         _root["f_mc"+level].onRollOver = function() {
  50.             trace("inst: "+this+" | x: "+f_mc._x+" | y: "+_mc._y+" | code: "+this.code+" | gebiet: "+this.gebiet);
  51.         }
  52.     }
  53. }

Und jetzt zum Problem:
Ich hab's anscheinend nicht verstanden, wie ich die erzeugten Instanzen jetzt anspreche. Mit root["f_mc"+level] kann ich zwar einen Eventhandler an die Instanzen packen und mit f_mc kann ich _x und _y Eigenschaften tracen. Aber an meine Member code und gebiet komme ich partut nicht dran und erhalte immer ein undefined. Egal ob ich es mit this, f_mc, root["f_mc"+level], _level10.f_mc01 oder sonstwas versuche. Ich habe kein gültiges Handle auf die Instanzen in der Hand.

Was mache ich falsch, wo liegt mein Problem bitte?
Kann evtl. jemand mit einsteigen und helfen?

Lieben Dank
Pyro

Geändert von PyroMarkus (15-12-2004 um 14:30 Uhr)
PyroMarkus ist offline   Mit Zitat antworten
Alt 15-12-2004, 16:28   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Der MovieClip und die Instanz deiner Klasse sind völlig unabhängig voneinander. Wenn du vom einen auf das andere zugreifen möchtest, musst du jeweils eine Referenz auf das Ziel anlegen.

mfg r.

Geändert von bokel (15-12-2004 um 16:30 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 15-12-2004, 19:09   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 18
Besten Dank für den Input.

Nur leider komme ich mit der Info nicht ganz weiter - hast Du evtl. ein Beispiel für mich?

Besten Dank,
Pyro
PyroMarkus ist offline   Mit Zitat antworten
Alt 15-12-2004, 22:42   #4 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Dein Script sähe dann z.B. so aus:
ActionScript:
  1. function draw( basisFigur_mc ) {
  2.  
  3.         // Annahmen zur Berechnung
  4.         var w = 300;
  5.         var h = 300;
  6.    
  7.     // neues Level
  8.         level++;
  9.        
  10.         // duplicate
  11.         var f_mc = basisFigur_mc.duplicateMovieClip("f_mc"+level, level);
  12.  
  13.                 // hier positioniere ich die Kopien wild rum
  14.         f_mc._x = (w/2) + ((mktant/aant  - 1) * (w/2) * (2/3));
  15.         f_mc._y = (h/2) - ((mktzuw/azuw - 1) * (h/2) * (2/3));
  16.         f_mc._width = mktvol/avol * (((w+h)/2)/10);
  17.         f_mc._height = mktvol/avol  * (((w+h)/2)/10);
  18.  
  19.         f_mc._visible = true;
  20.  
  21.         // referenz auf instanz in mc speichern
  22.         f_mc.inst = this;
  23.  
  24.         f_mc.onRollOver = function() {
  25.             trace("inst: "+this.inst+" | x: "+this._x+" | y: "+this._y+" | code: "+this.inst.code+" | gebiet: "+this.inst.gebiet);
  26.         }
  27.     }

mfg r.

Geändert von bokel (15-12-2004 um 22:43 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 16-12-2004, 08:49   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 18
Thumbs up Wunder

Der Hammer - funktioniert!

Das
ActionScript:
  1. f_mc.inst = this;
kannte ich noch nicht - herzlichen Dank, hat sehr geholfen!

Grüße
Pyro
PyroMarkus ist offline   Mit Zitat antworten
Alt 03-02-2005, 11:51   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Beiträge: 18
Question super

Hallo,

ich habe ein neues Problem, was ganz gut zum o.G. passt:

ActionScript:
  1. import anni.Container;
  2.  
  3. class anni.SelectionContainer extends Container {
  4.    
  5.     var instName;
  6.        
  7.     function SelectionContainer() {
  8.         // super();
  9.         this.instName = this._name;
  10.         trace(this.instName);
  11.         init();
  12.     }
  13.    
  14.     function init() {
  15.                  ...
  16.     }
  17. }

Hintergrund: Die Klasse Container extends MovieClip.
Frage: Warum kann ich mit this._name nicht auf die Eigenshaften des MovieClips zugreifen? Ich bekomme in der Syntax immer ein undefined im trace.
In der Basisklasse Container kann über diese Syntax auf die Eigenschaften zugegriffen werden, allerdings nur im Konstruktor - danach ist die Membervariable wieder undefined.

Besten Dank im voraus!
PyroMarkus 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 02:55 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele