Fehler...

SonMiko

Erfahrenes Mitglied
Hallo zusammen,

ich habe einen Fehler in meinem Script und komme einfach nicht auf die Lösung.
Es geht um folgendes:
Ich möchte eine Anzahl an Objekten mit einem Funktionsaufruf nacheinander auf der Bühne platzieren. Diese Objekte kann man anklicken, dann verschwinden sie,
und die erste Funktion überprüft eben auch ob die besagte Anzahl erreicht ist - wenn nicht werden wieder objekte erstellt.

Das Problem bei mir ist:
Wenn ich sagen wur 5 Objekte auf der Bühne habe, kann ich quasi endlos lang Objekt 5 anklicken, es verschwindet immer wieder und taucht woanders wieder auf - so wies sein soll. Klicke ich aber ein niedrigeres Objekt an (1,2,3 oder 4), dann verschwinden die Objekte und es kommen keine neuen.

Hier der Code in der ersten Zeitleiste:
Code:
stop();

//Variablen
var anzObjMax:Number=5;
var anzObjGleich:Number=5;
var anzObj:Number=0;
var objNummer:Array;

//Funktion Objekt werfen
function objWerfen(){
	if(anzObj<anzObjGleich){	
	this.attachMovie("flugobjekt_mc","flugobjekt_mc"+anzObj,anzObj);
	this["flugobjekt_mc"+anzObj]._x=random(600);
	this["flugobjekt_mc"+anzObj]._y=random(400);
	this["flugobjekt_mc"+anzObj].createTextField("mike_txt",anzObj,0,0,50,50);
	this["flugobjekt_mc"+anzObj].mike_txt.text=anzObj;
	anzObj++;
	}
	else{
		//
	}
}

onEnterFrame=function(){
	objWerfen();
}

Und hier der Code der Schaltfläche die auf dem Objekt (flugobjekt_mc) das generiert bzw. attacht wird, liegt:

Code:
on (press) {
	_parent.anzObj--;
	this.removeMovieClip();
}

Ich vermute folgendes:
Ich generiere ein Objekt von 0 bis 4 (also 5 Stück).
Alles verharrt, bis ein Objekt geklickt wird - inzwischen
saust die Funktion bei jedem Frame-Aufruf immer wieder rauf und runter und checkt ob die Anzahl der Objekte auf der Bühne erreicht ist. Klicke ich nun die 4,
wird einmal die Anzahl der Objekte dekrementiert und sofort erscheint ein neues Objekt.
Da ich die 4 klicke, kann es nur sein, dass auch wieder ein Objekt mit dem Wert 4 erscheint. Klicke ich aber hingegen die 3, dann wird auch um eins dekrementiert und das Objekt verschwindet, aber die Tiefe 3 fehlt in mitten der Tiefen 0-4.
Das nächste Objekt das erschaffen wird erhält wieder die fehlende Tiefe - also die 4.
So wird immer ein Objekt nach dem anderen überschrieben, wenn es kleiner als 4 ist (bzw. die Tiefen werden überschrieben), und so kommen dann auch keine neuen Objekte.

Mein Lösungsansatz war folgende Idee:
Ich wollte ein Array objNummer anlegen und irgendwie immer die aktuelle Zahl (anzObj) dort reinspeichern. Wenn ich dann auf ein Objekt 3 klicke, wird der Wert 3 aus dem Array gelöscht und "frei", und dann sollte beim nächsten Aufruf aber auch eben nur die 3 vergeben werden...

Jetzt brüte ich hier wie ein irrer, mein Schädel saust und ich bin irgendwie ein wenig verzweifelt - denn so richtig weiter bzw. umsetzen kann ich das ganze nicht.

Daher wäre ich echt wirklich dankbar, wenn mir jemand ein wenig helfen könnte.


P.S.: AnzObjMax ist noch nicht verwendet, das Array habe ich auch noch nicht richtig eingebaut...


Liebe Grüße,

Euer


Mike
 
Hi,

Code:
var amt = 0;

var max = 5;

var objects = new Array(max);

this.onEnterFrame = function() {
	for (var i=0; i<objects.length; i++) {
		var obj = objects[i];
		if (obj == undefined) {
			obj = this.attachMovie("obj", "obj" + i, i);
			obj._x = Math.random() * Stage.width;
			obj._y = Math.random() * Stage.height;
			obj.idx = i;
			obj.onPress = function() {
				objects[this.idx] = undefined;
				this.removeMovieClip();
			}
			objects[i] = obj;
		}
	}
}

Gruß
.
 
Klappt nun wirklich...
Naja wenigstens hab ich in die richtige Richtung gedacht.

Mir ist etwas merkwürdiges aufgefallen:
Wenn ich den Film kompiliere, funktioniert alles einwandfrei,
wenn ich dann jedoch das Fenster maximiere, verschwinden die Objekte wieder.
Das wird wohl daran liegen, dass die Gesamte Bühne verwendet wird, und die Werte Stage-Width und Stage-Height sich ändern... Trotzdem müsste man doch aber die Clips dann irgendwo sehen, und das ist nicht der Fall...

Gruß,

Mike
 
Hi,

liegt wohl daran, dass die Bühnenausrichtung standardmäßig zentriert ist, und durch die Vergrößerung der Nullpunkt nicht mehr oben links liegt.

Probiers mal mit:
Code:
Stage.scaleMode = "noScale";

Stage.align = "TL";

Gruß
.
 
Hi Tobi :),

danke, es klappt so schon, im Internet kann man es ja auch nicht maximieren, von daher spielt es keine Rolle.
Aber danke trotzdem, ich behalte den Code für künftige Dinge im Hinterkopf.


Besten Gruß,

Mike
 
Zurück