follow Object Problem

funkymatti

Grünschnabel
Hallo,

ich habe ein Problem mit meiner Navigation. Meine Flashseite besteht aus 4 Movieclips, die sich beim Mouseover skalieren. Eine Eigentschft die ich nicht erstellen konnte, ist dass die MC 2, 3, 4 beim vergrössern eines MC's automatisch die Position verändern und immer in einem Abstand von 20 px zum vorhergehenden MC stehen bleiben. Ich habe dafür eine Variable mit dem Namen follow_obj erstellt und in einer if-Anweisung in der Prototype Slidefunktion hinterlegt.

Folgender Code soll dies ermöglichen:



Code:
 this._x + this.follow_mc._width + 20;


Leider funktioniert das nicht. Vielleicht hat jemand eine Idee. Ich bin kein Flash-Dev., ich bin immer noch am lernen, aber das müsste doch zu lösen sein. Anbei meine Flashdatei.

Danke euch schon mal

funkymatti
 

Anhänge

  • mein_menue2.fla
    17 KB · Aufrufe: 43
Hi,

1. die Zeile
Code:
this._x + this.follow_mc._width + 20;
ist keine gültige Zuweisung, sondern ein Ausdruck (es fehlt z.B. ein Gleichheitszeichen).

2. Da die Position eines Clips nicht nur von der Position seines Nachfolgers abhängt, sorgst Du am besten in einer externen Funktion "reArrange" für das Anordnen der Clips.

3. Du arbeitest anscheinend mit Flash 6 - dennoch solltest Du Dir angewöhnen, bei Bezeichnern auf Groß- und Kleinschreibung zu achten (Dein Film läuft z.B. unter Flash 7 und 8 nicht mehr, da Du u.a. "mc_Profil" mal mit großem und mal mit kleinem "P" geschrieben hast).

4. Mit folgendem Code auf der Hauptzeitleiste sollte es klappen:
Code:
// Positionieren (Slide) und MC-Verfolgung
movieclip.prototype.slideClip = function(pHoch, pRunter, pHFaktor, pRFaktor) {
	with (this) {
		if (signal == 1) {
			this._width += (pRunter - _width) / pHFaktor;
			this._height += (pRunter - _height) / pHFaktor;
		}
		if (signal == 0) {
			this._width += (pHoch - _width) / pRFaktor;
			this._height += (pHoch - _height) / pRFaktor;
		}
	}
	reArrange();
}

// Navigations Clip Inhalt
movieclip.prototype.initClip = function(pClip, pTitel, pInhalt) {
	pClip.txtTitel = pTitel;
	pClip.txtInhalt = pInhalt;
	
	pClip.signal = 0;

	pClip.onRollOver = function() {
		this.signal = 1;
	}
	pClip.onRollOut = function() {
		this.signal = 0;
	}
}

// Clips neu positionieren:
var clips = new Array(mc_Profil, mc_History, mc_Service, mc_Kontakt);

function reArrange() {
	for (var i=1; i<clips.length; i++) {
		clips[i]._x = clips[i - 1]._x + clips[i - 1]._width + 20;
	}
}

// Navigations Clip Initialisieren
initClip(mc_profil, "Profil", "Dies ist der Inhalt!");
initClip(mc_History, "Hisstory", "Dies ist der Inhalt!");
initClip(mc_Service, "Service", "Dies ist der Inhalt!");
initClip(mc_Kontakt, "Kontakt", "Dies ist der Inhalt!");

mc_Profil.onEnterFrame = function() {
	this.slideClip(80, 425, 3, 5, 0);
}

mc_History.onEnterFrame = function() {
	this.slideClip(80, 425, 3, 5);
}

mc_Service.onEnterFrame = function() {
	this.slideClip(80, 425, 3, 5);
}

mc_Kontakt.onEnterFrame = function() {
	this.slideClip(80, 425, 3, 5);
}

Deine Vorgehensweise ist übrigens in sofern suboptimal, als dass Du auf jedem einzelnen Clip die ganze Zeit eine onEnterFrame-Methode laufen hast. Performanter wäre es, wenn Du die onEnterFrame-Methode in der Funktion "slideClip" anlegen würdest, und letzte nur aufrufen würdest, wenn sich der Status eines Clips ändert.

Gruß
.
 
Hallo Tobias,
vielen Dank für Deine Korrekturen und Deine Tips. Ich bin leider immer noch bei FlashMX hängen geblieben und habe mich nicht wirklich um die neuen Versionen gekümmert (ich setzte jetzt erst intensiv mit Flash auseinander). Werde in Zukunft auf die Groß-Kleinschreibung achten!

Der Code funktioniert super es sieht besser aus, als ich mir das vorgestellt habe.

Ich Danke Dir nochmals für Deine schnelle Hilfe

Viele Grüße

funkimatti
 
Zuletzt bearbeitet:
Hallo Tobias,

ich hatte leider bisher keine Gelegenheit das Thema abzuschliessen. Ich steige leider bei Deinem Script immer noch nicht ganz durch. Ich hätte noch zwei Fragen:

1.) wie kann ich anstatt die Filme zu entladen, bei "DragOut" vier andere Filme in die jeweiligen Pads laden? Dafür müsste ich eigentlich kein neues Array anlegen, oder?

Code:
pads[i].onRollOut = pads[i].onDragOut = function() {
		this.scaleTo(0, 4, reArrange, unloadImg, true);

2.) Wie kommt es zu den weissen Rändern an den Pads? Ich finde kein AS in dem das deffiniert wird.
 
Zurück