Menü funktioniert nicht

Eddymaniac

Erfahrenes Mitglied
Hallo Leute,

ich hab mir ein kleines Testmenü zusammengebastelt. Allerdings funktioniert es nicht so wie ich gerne hätte. Ich habe eine Grafik die bei Mouse- Over hinaus fahren soll und weitere Unterpunkte enthält. Allerdings werden diese Unterpunkte nicht angezeigt und wenn dann funktioniert die Animation der Unterpunkte nicht.

Wäre klasse wenn sich jemand meiner annehmen könnte. Die Testdatei ist angehängt und sagt vielleicht mehr aus, als ich beschreiben kann.

Grüße,
Eddy
 

Anhänge

  • Test.zip
    22,3 KB · Aufrufe: 37
na, ist wohl zu kompliziert um so zu erklären oder?

Hat nicht doch jemand lust meine Geschichte mal anzusehen?

Gruß
 
Eigentlich nicht, aber große Lust hatte ich dieses Mal nicht, das gebe ich zu:

1. stehe ich nicht besonders auf Thread-Pushen mit schnippischen Bemerkungen und

2. handelt es sich mal wieder um eine typische "Funzt ned; hier das File, nun macht mal!"-Frage, deren Beantwortung meist keinen erkennbaren Lerneffekt zeigt.

Nun gut, ich probiers dennoch: Die rollOver-Handler auf Deinen Buttons können nicht funktionieren, da Du schon einen Maushandler auf dem übergeordneten MC (das ganze Menü) liegen hast. Beispiel: Befindet sich MC2 in MC1 und liegt auf MC1 z.B. ein "this.onRollOver" oder "on(rollOver)", so werden weitere Maushandler auf MC2 blockiert. Du musst die Kollision des Mauszeigers mit dem Menü also auf andere Weise testen (ich empfehle hitTest), um Deine Buttons weiterhin benutzen zu können (im Anhang siehst Du, wie ich es gelöst habe). Die Animation kann man in diesem Fall auch prima mit AS erledigen; damit umgehst Du die leidigen Probleme, die bei der Kombination aus Script und Zeitleiste entstehen. Ebenso lässt sich die Animation der Schrift auf den Buttons mit einem Color-Objekt und wenigen Zeilen erledigen.
Du brauchst nicht für jeden Button einen eigenen MovieClip (und schon gar nicht 3 verschachtelte), wenn Du die Beschriftung von aussen zuweisen kannst und die Aktionen (getURL?) zentral vom Menü aus steuerst.
Ebenso könntest Du ein und den selben MC auch für mehrere Menüs verwenden, wenn Du Hintergrundbild und Aktionen von _root aus zuweist - so weit bin ich in meinem Beispiel allerdings (z.T. mangels zweiter Menügrafik) nicht gegangen. ;)

Gruß
.
 

Anhänge

  • leistungen.zip
    35,7 KB · Aufrufe: 41
Also versteh mich nicht falsch, ich lege schon Wert darauf das ganze auch zu verstehen. Seit ich gepostet habe, hab ich auch unheimlich viel geschmökert und gesucht. Die verschiedensten Lösungsansätze gesehen. Ich konnte halt nicht still halten und einfach abwarten. Also habe ich zwischenzeitlich dieses auszufahrende Menü in seine Einzelteile zerlegt und wollte nun versuchen es so zu lösen. Da kam gerade dein Post rein. Ist natürlich viel einfacher als ich es jetzt gemacht hätte.

Nur eine Bitte, wäre noch klasse wenn du das Coding auskommentieren könntest. Ich verstehe es zwar zur Hälfte aber die andere Hälfte eben nicht ganz. Von daher könntest du meinem Lerneffekt etwas auf die Sprünge helfen. Grade was hinter den Methoden und Variablen steckt.

Besten Dank nochmal!

Gruß,
Eddy
 
Hmm... Du würdest mir viel Arbeit ersparen, wenn Du Deinerseits die Codeteile nennen würdest, die Du nicht verstehst, aber nun gut:

Button:
Code:
this.useHandCursor = false; // Handcursor abschalten

this.onEnterFrame = function() { // per onEnterFrame darauf warten ...
	if (_caption != undefined) { // bis von aussen die Variable "_caption" gesetzt ist ...
		btext.text = _caption; // und den Inhalt im Textfeld anzeigen.
		delete this.onEnterFrame; // onEnterFrame beenden.
	}
}

this.onRollOver = function() { // beim rollOver:
	fadeTo(-100, 5); // Farbfading auf einen Wert von -100
// Die Werte gehen hier bei von -255 (schwarz) über 0 (Originalfarbe) bis +255 (weiß)
}

this.onRollOut = this.onDragOut = function() { // beim RollOut:
	fadeTo(0, 7); // Wieder zurück zur Originalfarbe, diesmal etwas langsamer
}

this.onRelease = function() { // beim Klicken:
	_parent.pressed(this); // Im übergeordneten MC (das Menü!) die Funktion "pressed"
// aufrufen und ihr eine Referenz auf den jeweiligen Button übergeben (dann weiß diese,
// welcher Button gedrückt wurde).
}

var cl = new Color(this); // Fürs Fading ein Farb- und ein
var tr = cl.getTransform(); // Transformationsobjekt anlegen

function fadeTo(d, s, _callback, _cbp) { // Funktion zum Farbfading:
	this.onEnterFrame = function() { // onEnterFrame-Methode starten ...
		tr.rb += (d - tr.rb) / s; // und Transformationswerte dem Zielwert schrittweise anpassen.
		tr.gb = tr.bb = tr.rb;
		cl.setTransform(tr);
		if (Math.abs(d - tr.rb) < 1) {
			tr.rb = tr.gb = tr.bb = d;
			cl.setTransform(tr);
			delete this.onEnterFrame;
			_callback(_cbp); // der Callback-Kram ist optional; damit könntest Du z.B.
// zwei Fadings nacheinander durchführen lassen. ;)
		}
	}
}

Menü:
Code:
var by = this._y; // Anfangsposition speichern (Menü heruntergefahren)
var that = this; // wir merken "uns selbst" in einer Variable

but1._caption = "Leistung 1"; // Den Buttons ihre Beschriftungen zuweisen
but2._caption = "Leistung 2";
but3._caption = "Nummer 3";
but4._caption = "Nummer 4";

function pressed(obj) { // Wird aufgerufen, wenn ein Button gedrückt wurde (s.o.)
	switch(obj) { // Nachschauen, welcher Button es denn war ...
		case but1: getURL("link1.htm"); break; // und jeweilige Aktionen ausführen!
		case but2: getURL("link2.htm"); break;
		case but3: getURL("link3.htm"); break;
		case but4: getURL("link4.htm"); break;
	}
}

this.onEnterFrame = function() { // onEnterFrame-Methode starten und kontinuierlich
// auf Kollision des Menüs mit dem Mauszeiger testen:
	if (this.hitTest(_parent._xmouse, _parent._ymouse, false)) { // Wenn Drinne:
		slide(by - 95, 3); // Hochfahren (95 Pixel über der Startposition reicht hier)
	} else { // ansonsten:
		slide(by, 5); // wieder herunterfahren, diesmal etwas langsamer.
	}
}

function slide(dy, s) { // Hier nun die Funktion zum Auf- und Abbewegen:
	bgnd.onEnterFrame = function() { // zweite onEnterFrame auf dem Hintergrund-MC starten
		that._y += (dy - that._y) / s; // Position dem Ziel anpsssen ...
		if (Math.abs(dy - that._y) < 1) { // und wenn so gut wie erreicht:
			that._y = dy; // auf Ziel festlegen und ...
			delete this.onEnterFrame; // onEnterFrame stoppen.
		}
	}
}

Gruß
.
 
... nicht im Menü, sondern im Button. Das unsichtbare Rechteck dort dient dazu, dass der gesamte Bereich des Buttons auf das Mouse-Over reagiert, nicht nur die Schrift. Läge in dem Button-MC nur das Textfeld, so würde die Maus nur reagieren, wenn Du zufällig genau einen Buchstaben triffst. ;)

Gruß
.
 
Ok, schon verstanden. Klingt logisch.

Ich hab jetzt auch zum eigenen Verständnis das ganze nochmal komplett neu aufgezogen. Funktioniert sogar ;-)

Nur scheint nun der Text des Buttons unscharf zu sein. Woran könnte das liegen?
 
Die üblichen Verdächtigen:

- Schrift zu stark geglättet (ab Flash 8 "Antialias für Lesbarkeit" einstellen)

- Schrift geglättet, obwohl Pixelfont ("kein Antialias" wählen)

- Schrift skaliert (Textfeld neu anlegen, nicht verzerren)

- Schrift liegt nicht auf ganzzahligen Pixelkoordinaten (nachjustieren)

Gruß
.
 
Wie müsste ich es denn machen, wenn ich möchte das mein Button nicht nur die Farbe vom Text ändert, sonder ständig ändert. Also quasie blinkt. Ich habe es mit ner While- Schleife versucht, aber leider bekomme ich es nicht hin.
 
Zurück