AS - Klassen und Array

Xeppit

Mitglied
Hallo,

habe folgendes Problem:
Ich habe eine Klasse erstellt in der ich ein Mehrdiminsionales Array erzeuge.
Dieses array möchte ich mit var1._areaConfig[x], var2._areaConfig[x] ... ansprechen (Variable ist auf public gesetzt).
Aber bei jedem neu erstellten Objekt wird mein array überschrieben d.h. mein Ausgabe für var1.array ist geleich mit var2.array. Werden aber unterschiedliche erzeugt und erst beim generieren eines neuen Objekts überschrieben.
Muss man beim erstellen von Arrays in Klassen irgendwas besonderes beachten?

Günter



Code:
	// Konstruktor 
	public function Area(p_area:Number) {
		this._area = p_area;
		Area._count++;
		this._index = Area._count;
		this.VarInit();
		this.SolutionsX();
	}
	
	// Interne Funktionen
	private function SolutionsX(){
		this._xa = this._xaMin;
		this._jMax = Math.round((this._area / this._yaMin)/this._steps);
		this._sol = this._jMax;
		for (this._j=0; this._j < this._jMax; this._j++){
			this._ya = this._area / this._xa ;
			this._areaConfig[this._j] = new Array (this._xa, this._ya);
			//trace (_areaConfig);
			this._xa = this._xa + this._steps;
			}
	}
 
Hallo,

von hier aus kann ich kein Überschreiben erkennen. Und Arrays kannst du eigentlich überall bedenkenlos einsetzen.
Das Array wird hingegen von _j bis _jMax immer mit denselben zwei Elementen aufgefüllt. Und da diese Variablen zumindest nicht im Konstruktor definiert werden, denk ich mal, dass die mit der varInit-Funktion initialisiert werden. Wenn du aber diesen beiden Variablen in der Klasse drin feste Werte zuweist, werden logischerweise in jedes Array jeder Instanz deiner Klasse dieselben Werte abgefüllt.

gruss
 
Hi,

wie erstellst Du denn die Objekte? Du machst nicht z.B. etwas wie:
Code:
var var1:Area = new Area(sonstwas);
var var2:Area = var1;
? In dem Fall würdest Du nur eine zweite Referenz auf das Objekt bekommen.

Zeig mal etwas mehr Code (insbesondere den Anfang der Klasse und die entsprechenden Aufrufe in der .fla).

Gruß

EDIT @luke: Hier wird der Wert von _ya in Abhängigkeit vom im Konstruktur übergebenen Wert gesetzt:
Code:
this._ya = this._area / this._xa;
, daher sollten bei verschiedenen Instanzierungen (siehe nächstes Posting) nicht unbedingt gleiche Werte ins Array wandern.
.
 
Hallo,

mal der ganze Code. Überprüft mit zahlreichen trace Abfragen.
Das ganze ist nur zum Spass. Es geht mir also nicht so sehr um die
Umgehung des Problems um eine andere lösung für das Problem zu finden
sondern um die prinzipielle Frage wieso mein Array überschireiben wird.

Günter


Code für fla Aufruf

Code:
import Area;
import Room;

var area:Area = new Area(50);
var room:Area = new Area(12);
Rectangle Init();

Code für Aufruf

Code:
function RectangleInit(){
this.createEmptyMovieClip("rectangle_mc", 10);
versatz = 0;
rectangle_mc._x = 10;
rectangle_mc._y = 100;
for (i=0; i < area._sol; i++){
	versatz = versatz + area._areaConfig[i][0]*5 +10;
	drawRectangle(rectangle_mc, area._areaConfig[i][0]*5, area._areaConfig[i][1]*5, 0x99FF00, 100);
	}
}
	
function drawRectangle(target_mc:MovieClip, boxWidth:Number, boxHeight:Number, fillColor:Number, fillAlpha:Number):Void {
	with (target_mc) {
		lineStyle(1, 0x000000, 100);
        moveTo(0 + versatz, 0);
        lineTo(boxWidth + versatz,0 );
        lineTo(boxWidth + versatz, boxHeight);
        lineTo(0 + versatz, boxHeight);
        lineTo(0 + versatz, 0);

    }
}



Code für die Klasse

Code:
class Area {
	private var _area:Number;	 // Übergabewert für die Größe der NZF - in m2
	private var _xa:Number; 	 // 
	private var _ya:Number;		 //
	private var _steps:Number;	 // Verringerungs- bzw. Erhöhungswert für x,y in - in m (0.05)
	private var _xaMin:Number;	 //
	private var _xaMax:Number;	 //
	private var _yaMin:Number;   //
	private var _yaMax:Number;   //
	private var _i:Number;		 // Index 
	private var _j:Number;		 // Index
	private var _jMax:Number;	 // IndexMax
	public static var _count:Number = -1;
	public var  _index:Number; //
	public var  _areaConfig:Array = new Array(); //
	public var  _sol:Number; //

	
	// Konstruktor 
	public function Area(p_area:Number) {
		this._area = p_area;
		Area._count++;
		this._index = Area._count;
		this.VarInit();
		this.SolutionsX();
	}
	
	// Interne Funktionen
	private function SolutionsX(){
		this._xa = this._xaMin;
		this._jMax = Math.round((this._area / this._yaMin)/this._steps);
		this._sol = this._jMax;
		for (this._j=0; this._j < this._jMax; this._j++){
			this._ya = this._area / this._xa ;
			this._areaConfig[this._j] = new Array (this._xa, this._ya);
			trace (_areaConfig);
			this._xa = this._xa + this._steps;
			}
	}
	
	//Varaibelen Initalisierung
	private function VarInit(){
		this._i = 0;
		this._j = 0;
		this._jMax = 0;
		this._ya = 10;
		this._steps = 1; 
		this._xaMin = 3;
		this._xaMax = 0;
		this._yaMin = 3;
		this._yaMax = 0;
	}
	
	// Kommunikation nach Aussen 
	public function get xa():Number {
		return this._xa;
	}
	public function get ya():Number {
		return this._ya;
	}
	public function get areaVar():Number {
		return this._areaConfig[10];
	}
}
 
Zurück