Zugriffssteurung von Datenfeldern - Problem unter Flash AS2

Mayday171

Erfahrenes Mitglied
Hallo,

Habe eine Frage zur Zugriffsteuerung in AS2.
Im nachfolgenden Quelltext möchte ich einfach nur von der methode rechts() auf eines der Datenfelder der Klasse Produkt zugreifen. Klappt aber irgendwie nicht. Zum testen hab ich das ganze mit einen Trace versehen.

PHP:
class Produkt {
	
	public var strpos;
	public var startnumber;
	public var filename;
	public var img;
	public var anzahl;
	public var x,y;
	public var pfad;
	public var error:Error;
	public var ct;
	
	
	function Produkt(x,y, anzahl,firstfilename) {
		 var strpos      = firstfilename.indexOf(".")
		 var startnumber = substring(firstfilename,strpos,1);
		 var filename    = substring(firstfilename,1,strpos-1)
		 var img         = new Array(anzahl);
		 var anzahl 	 = anzahl;
		 var pfad        = pfad;
		 
		 
		 for(var i=startnumber;i<=anzahl;i++) {	
                 ............. 
                 }
public function rechts() {
		trace(anzahl);  // <---- Hier teste ich den Zugriff! und es funktioniert nicht
		var l=0;
		_root.onEnterFrame=function() {
			if(ct._width>0 && ct._height>0) {            
				if(l==anzahl-1) { 		
					img[l]._visible=false; 				
					l=-1; 								
				}                                             
				img[l]._visible=false;		
				l++;
				img[l]._visible=true;	
			}
		}
	}
}
 
Hi,

dadurch, dass Du "anzahl" in Deinem Konstruktor mit dem Schlüsselwort "var" deklarierst, erstellst Du eine lokale Variable der Konstruktorfunktion. Lass das "var" weg, oder verwende den Zeiger auf "this", dann solltest Du den Wert der Klassenvariable zuweisen.

Gruß
.
 
Hab das var weggelassen und es ging immer noch nicht. Muss das this davor schreiben.
Komische Sache, aber danke

Hab jetzt leider ein weiteres Problem. Kann jetzt nicht mehr in der _root.onEnterFrame MEthode auf die Datenfelder zugreifen. Was mach ich da ?

MfG
 
Zuletzt bearbeitet:
Hi,

zum einen darfst Du in Deinem Konstruktur die übergebene Variable nicht genau so nennen, wie die Klassenvariable. Woher soll der Interpreter wissen, auf welche Variable (den Klassenmember, die lokale Variable oder den Parameter) er zugreifen soll?

Zum anderen befindest Du Dich innerhalb Deiner onEnterFrame-Methode auf _root (dem Ort, auf dem diese Methode definiert ist) - Deine Klasseninstanz ist daher an dieser Stelle unbekannt. Abhilfe kannst Du mit einer lokalen Hilfsvariable schaffen, die auf Deine Instanz zeigt:
Code:
class ClassTest {
	public var foo:Number;
	public var bar:Number;
	public var foobar:String;
	
	public function ClassTest(a:Number, b:Number, c:String) {
		foo = a;
		bar = b;
		foobar = c;
	}
	
	public function machWas():Void {
		trace("foo: " + foo);
		trace("bar: " + bar);
		trace("foobar: " + foobar);
	}
	
	public function enterFrameTest():Void {
		var that:ClassTest = this; // Hilfszeiger auf diese Instanz
		_root.onEnterFrame = function() {
			// "that" ist hier noch bekannt, "this" zeigt aber auf _root
			that.foo ++; // foo hochzählen;
			trace(that.foo);
		}
	}
}
Code:
// Testaufrufe:

import ClassTest;

var t = new ClassTest(1, 2, "Hallo Welt");

t.machWas();

t.enterFrameTest();

Gruß
.
 

Neue Beiträge

Zurück