[MX] Problem mit einer Menüanimation

Comander_Keen

Erfahrenes Mitglied
Hallo zusammen!

Um gleich auf den Punkt zu kommen. Ich habe vor das "selected Works"-menü von depthflow.net zu erstellen. Eigentlich sieht es auf den ersten Blick recht einfach aus. Aber der Teufel steckt wie immer im Detail (für mich). Alle Daten kommen bei mir aus einem XML-Dokument .. und steuern auch gleich die Anzahl der mc's, welche dann per attach in die Szene geladen werden.

Soweit klappt auch alles .. nur habe ich eine fatale Denkblockade wenn es um das Animationsscript geht (getweent wird auch per as). Mehr als das es nicht funktioniert kann ich euch dazu leider nicht sagen. Die sich im Code befindenen Kommentare sollten alles weitere erklären.

Damit erstelle ich die einzelnen MC's:

PHP:
/* Beim starten ist der erste MC der aktuelle */
_global.prevClipId = 0;

/* XML to Array*/
XMLNode.prototype.toArray = function(arr) {
	var anzahlKnoten = this.childNodes.length;
	for (var k = 0; k<anzahlKnoten; k++) {
		if (this.childNodes[k].nodeType == 1) {
			arr[k] = [];
			for (a in this.childNodes[k].attributes) {
				arr[k][a] = this.childNodes[k].attributes[a];
			}
			if (this.childNodes[k].hasChildNodes()) {
				this.childNodes[k].toArray(arr[k]);
			}
		} else {
			arr[k] = this.childNodes[k].nodeValue;
		}
	}
	return arr;
};

/* Erstellung des Menüs*/
var exhibitions = new XML();
exhibitions.ignoreWhite = true;
exhibitions.onLoad = function(stat) {
	// Anzahl der Datensätze im XML-Dokument
	_global.all = exhibitions.childNodes[0].childNodes.length;
	// Erstellung der MCs
	for (i=0; i<all; i++) {
		if (stat) {
			exhibitionsArray = this.toArray([]);
			exhib_type = exhibitionsArray[0][i].type;
			exhib_name = exhibitionsArray[0][i][0][0];
			attachMovie('mc exhibition', 'mc_exhibition_'+i , (i+1),{_y: (i*12), type:exhib_type, name:exhib_name});
		}
	}
};
exhibitions.load("xml_to_array.xml");

Das nächste Script ist im MC selbst.


PHP:
// Ausgabe des Namens und des Typs
this.text_name.text = name;
this.text_type.text = type;
// prevClipPos entspricht der Anzahl an Clips unter dem vorherigen Clip
j = _global.prevClipId;
prevClipPos = all-j-1;
// currentClipPos entspricht der Anzahl an clips unter dem aktuellen Clip
currentClipPos = all-i-1;
this.onMouseDown = function() {
	if (i != j) {
		// Einfahren des vorherigen MCs 
		for (k=prevClipPos; k>0; k--) {
			_root['mc_exhibition_'+(j+1)].tweenTo(0, (_root['mc_exhibition_'+(j+1)]._y-70), 3);
			j = j+1;
		}
		// Ausfahren des aktuellen MCs
		var i = this._name.split('_')[2]/1;
		_global.prevClipId = i;
		for (k=currentClipPos; k>0; k--) {
			_root['mc_exhibition_'+(i+1)].tweenTo(0, (_root['mc_exhibition_'+(i+1)]._y+70), 3);
			i = i+1;
		}
	}
};

Und dies ist die fla(+xml).

Freue mich über jeden Tip!

greetz keen!
 
Abend,

keine Ahnung ob euch das nicht interessiert hat .. oder ob ihr nur zu faul wart den code zu sichten. All in all habe ich es selbst (nach Nächten der Verzweiflung) lösen können.

Die Anzahl der Bugliste verkneife ich mir hier erstmal. Den fertigen Code (im mc) gibts hier zu sehen (das Ergebnis wird ein paar Tage oben bleiben).


PHP:
thisClipId = this._name.split('_')[2]/1;
// Ausgabe des Namens und des Typs
this.text_name.text = name;
this.text_type.text = type;
// Funktion um Clips nach oben zu verschieben
function moveClipUp(clipUpId) {
	if (!clipUpPos) {
		clipUpPos = all-clipUpId;
	}
	for (k=clipUpPos; k>0; k--) {
		clipUpPath = _root['mc_exhibition_'+clipUpId];
		clipUpPath.tweenTo(0, (clipUpPath._y-60), 3);
		//clipUpPath._y = clipUpPath._y -60;
		clipUpId++;
	}
}
// Funktion um Clips nach unten zu schieben
function moveClipDown(clipDownId) {
	if (!clipDownPos) {
		clipDownPos = all-clipDownId;
	}
	for (i=clipDownPos; i>0; i--) {
		clipDownPath = _root['mc_exhibition_'+(clipDownId+1)];
		clipDownPath.tweenTo(0, (clipDownPath._y+60), 3);
		//clipDownPath._y = clipDownPath._y +60;
		clipDownId++;
	}
}
/* bei einem Klick auf einen instanz von (mc_exhibition_i) */
this.onPress = function() {
	if (_root.clipOpen != true) {							//-Wenn kein Clip offen ist
		_root.clipOpen = true;
		_root.prevClipId = thisClipId;
		moveClipDown(this._name.split('_')[2]/1);
	} else {
		if (thisClipId != _root.prevClipId) {				//-+-Wenn ein anderer Clip geklickt wird
			if (thisClipId > _root.prevClipId) {			//-+-+-Wenn ein "höherer" Clip offen ist
				clipUpPos = thisClipId-_root.prevClipId;
				moveClipUp(_root.prevClipId+1);
				_root.clipOpen = true;
			}
			if (thisClipId < _root.prevClipId) {			//-+-+-Wenn ein "unterer" Clip offen ist
				clipDownPos = _root.prevClipId-thisClipId;
				moveClipDown(thisClipId);
				_root.clipOpen = true;
			}
		} 
		/*if (thisClipId == _root.prevClipId) {				//-+-Wenn der gleich Clip geklickt wird
			moveClipUp(_root.prevClipId+1);
			_root.clipOpen = false;
		}*/
		_root.prevClipId = thisClipId;
		
	}
};

greetz keen!

//edit: da ich ja eigentlich 0 Erfahrung in diesem Bereich habe.. würde ich mich natürlich über feedback und Optimierungs-/Verbesserungsvorschläge freuen.
 
Zuletzt bearbeitet:
Sorry,

aber ich zB muss Sachen machen die nennt man AAAAAAAAAAAArbeit, und das während ich streng auf die Abschluss Magister Arbeit in altgriechischer Philosophie zugehe - so ein paar newbie Fragen beantworten ist da als Ablenkung ganz gut, dein Script hingegen sah von Anfang an so aus wie php oder eher doch Java Script - will meinen dein Stil ist mir eher fremd, und da hätte ich mich mal eben eine Stunde einarbeiten müssen - die hab ich aber nicht, ansonsten gern und immer (hier sind eh wie mir scheint die meissten Beantworter auf Urlaub GEIST wo bist du ? Stephan Zesiger ich vermisse deine Arroganz ehrlich und tief empfunden ! na ja .....)

Grüsse
B
 
Abend #2,

wollte euch in keinster Weise für die ausgebliebenen Antworten "rügen". Aber das mit dem "Programmierstil" ist mein größtes Problem, in dieser Hinsicht. Man hätte da vieleicht eine kleine Klasse basteln können .. und sich damit eine menge Code ersparen. Wie schon gesagt .. würde mich über Verbesserungsvorschläge freuen.

greetz keen!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück