attachMovie+Random [FlashMX]

Fey

Erfahrenes Mitglied
Hallo liebe Forengemeinde,

ich habe einen Flash-Film. In diesem Film gibts einen MC, der verknüpft ist und per attachMovie auf die Bühne geladen wird. Jetzt werden sie halt noch schön in der angegebenen Reihenfolge angezeigt. Genau das möchte ich aber nicht. Wie kann ich angeben, dass sie in einer willkürlichen Reihenfolge angezeigt werden?

Und noch ein Problem. Dieser MovieClip ist für Drag 'n Drop. Wie kann ich vermeiden, dass ich zwei dieser Clips übereinander legen kann?

Grüße und ein dickes Danke im vorraus,
Feyiama
 
Wer ist denn "sie? :)

Was das fallenlassen der MCs betrifft - _droptarget ist eine ganze nette MC-Eigenschaft, die dafür genutzt werden kann - scheint mir aber ab und an etwas ungenau, was das Überlappen betrifft...

Geist
 
Hi Geist,

"sie" sind die erzeugten MovieClips...

...ich wollte aber grad noch einen Nachtrag machen. Und zwar sollten sie nicht in der Position zufällig angeordnet werden, sondern in der Ebene.

Grüße,
Feyiama
 
Ich würde jetzt wieder nur ins Blaue schießen, wenn ich nicht nochmal nachfragen würde, sorry.

Du hast mehrere MCs in der Bibliothek, richtig?
Und wird jeder einmal attacht oder mehrfach?

Bei einem ergibt es zumindest für mich keinen Sinn, dass da ein Zufallsprinzip bezüglich der Ebenen rein soll, wenn eh alle attachten MCs dann am Ende gleich aussehen... :)

Und sollen die MCs schon beim attachen nicht übereinander liegen, oder soll das nur später bei draggen nicht möglich sein, die übereinander fallen zu lassen?

Geist
 
"Wer fragt gewinnt" :)

Also, ich habe einen MovieClip der attached werden soll. Und nein, er sieht nicht gleich aus, weil in diesem MC noch ein dynamisches Textfeld ist, welches immer anderst gefüllt sind.

Vielleicht zum besseren Verständnis. Es handelt sich um eine Art Drag 'n Drop Quiz. Es gibt eine Überschrift, darunter Fragen und ganz unten erscheinen dann meine attachten MovieClips in denen dann die Antworten stehen. Diese sollen dann eben an die richtige Stelle gezogen werden. Nur wenn die schon in der richtigen Reihenfolge liegen isses ja blöd, oder? ;)

Die Movies sollen nach dem Dragen nicht übereinander liegen.

Grüße,
Feyiama

P.S.: Wenn immer noch was unklar ist, einfach nochmal nachfragen. So kurz vor der CeBIT kriegt ich immer einen leichten Schub ins Psychosomatische *heul*
 
kleiner feiner trick:

attachMovie hat seit mx einen 4.parameter:

das init-objekt. diesem init-objekt kann man
nicht nur eigenschaften zuweisen, sondern
auch funktionen.

gruss skyla
 
Dummerweise aber keine sekundären Variablen. :(

Z.B.
PHP:
this.attachMovie("kuller", "kuller"+a, a, { textfeldinstanz.text:element });
wird nix - indirekt geht's zwar auch, aber ist schon ne umständlichere Sache...

Status: Ich arbeite dran. :)

Geist
 
Ob's nun die sinnvollste Variante ist, weiß ich nicht...
PHP:
myFormat = new TextFormat();
myFormat.align = "center";

antworten = new Array();
antworten[0] = "Antwort 1";
antworten[1] = "Antwort 2";
antworten[2] = "Antwort 3";
antworten[3] = "Antwort 4";

a = 0;

while (a < 4) {
	var zufall = Math.floor(antworten.length*Math.random());
	var element = antworten[zufall];
	antworten.splice(zufall, 1);
	this.attachMovie("kuller", "kuller"+a, a, { _x:150, _y:a*35+25 } );
	this["kuller"+a].useHandCursor = false; // wem's gefällt :-)
	this["kuller"+a].onPress = function() {
		startDrag(this, true);
		this.swapDepths(9999);
		this.draggy = true;
	}
	this["kuller"+a].onMouseMove = function() {
		if (this.draggy) updateAfterEvent();
	}
	this["kuller"+a].onRelease = function() {
		if (this._droptarget == "") {
			stopDrag();
			this.draggy = false;
		}
	}
	this["kuller"+a].createTextField("textfeld"+a, a, -25, -10, 0, 0);
	this["kuller"+a]["textfeld"+a].autoSize = true;
	this["kuller"+a]["textfeld"+a].textColor = 0x000000;
	this["kuller"+a]["textfeld"+a].text = element;
	this["kuller"+a]["textfeld"+a].selectable = false;	
	this["kuller"+a]["textfeld"+a].setTextFormat(myFormat);
	a++;
}
eben mit einem Rechteck (100px * 20px) in der Bibliothek als MC - Beispiel im Anhang.

Shice nur, dass _droptarget nicht wirklich hält, was es verspricht - nur wenn ein MC den Mittelpunkt des anderen berührt, zählt er als getroffen, sonst nicht. :(

Geist,
dann wohl doch auf hitTest() zurückkommen müssend...
 

Anhänge

  • droptarget.rar
    2,1 KB · Aufrufe: 21
Hallo Geist,

danke für Deine Mühen, ich habe nur ein Problem damit. Ich steig nicht durch, wie ich es bei mir am besten einbinden kann. Ich bin happy, dass ich es jetzt so wie's ist zum laufen gebracht habe. Auch wenn wahrscheinlich der ein oder andere die Hände überm Kopf zusammenschlagen würde. :)

Mein Script:
Code:
kopf=32;
k_hoehe=45;
var richtigArray = new Array();

//Flaechen auf unsichtbar setzen
for (i=1; i<=4; i++){
	this["flaeche" + i]._visible = false;
}

//Die Flaechen, die angegeben wurden wieder sichtbar machen und Ueberschriften vergeben
for (i=1; i<=anzahlFlaeche; i++) {
	this["flaeche" +i]._visible = true;
	this["flaeche" + i].ziel_kopf = this["ueberschrift_" + i];
}

//Anzahl der Antwort-Flaechen festlegen
antwortAnzahl = anzahlFlaeche*3;

//Array definieren für Antworten
var antwortArray = new Array();
	
	antwortArray[0] = "No. 0";
	antwortArray[1] = "No. 1"
	antwortArray[2] = "No. 2"
	antwortArray[3] = "No. 3"
	antwortArray[4] = "No. 4"
	antwortArray[5] = "No. 5"
	antwortArray[6] = "No. 6"
	antwortArray[7] = "No. 7"
	antwortArray[8] = "No. 8"
	antwortArray[9] = "No. 9"
	antwortArray[10] = "No. 10"
	antwortArray[11] = "No. 11"
	antwortArray[12] = "No. 12"
	
//Antwortkarten erstellen	
for (i=1; i<=antwortAnzahl; i++){
	attachMovie("karte", "karte" + i, i);
	this["karte" + i]._x=-159+i*4;
	this["karte" + i]._y=217;
	this["karte" + i].inhalt = antwortArray[i];
}	

//Richtig oder Falsch
function korrekt() {
	for (i=1; i<=antwortAnzahl; i++) {
		if (this["karte" + i].hitTest(this["position" + i])) {
			richtigArray[i]=1;
		}
	}
	richtig=0;
	for (i=1; i<=richtigArray.length; i++) {
		if (richtigArray[i] == 1) {
			richtig++;
		}
	}
	if (richtig == antwortAnzahl) {
		feedback.gotoAndStop("lob")
	}
	if (richtig > 0 && richtig <= antwortAnzahl-1) {
		feedback.gotoAndStop("schade")
	}
	if (richtig == 0) {
		feedback.gotoAndStop("falsch");
	}
}

Vielleicht noch zur Info: Das soll eine Komponente werden, in der der User dann einige Einstellungen selber vornehmen kann.

Liebe Grüße,
Feyiama
 

Neue Beiträge

Zurück