[MX 2004] Grafisches Menü

luke_the_duke

Erfahrenes Mitglied
Hallo zusammen!

Ich hab hier ein kleines, grosses Problem mit einem Effekt für ein Menü. Das hier alles zu erläutern, wäre wohl zuviel des Guten, ich poste hier mal meine fla, die sollte selbsterklärend sein. Der Effekt funktioniert auch schon ganz gut, das Problem ist nur, dass wenn man mit der Maus von einem Button in den anderen fährt (und nicht von der leeren Fläche her), gibt es grafische Fehler. Das Script ist zugegeben monstermässig, schliesslich habe ich auch kaum geklaut ^^ , ich habe mich jedoch bemüht, es übersichtlich zu gestalten.

Kann mir jemand helfen?

Gruss Lukas
 

Anhänge

  • problem.zip
    116 Bytes · Aufrufe: 38
Der Anhang ist zumindest bei mir nur eine jungfäuliche Datei.

::edit: und dann vielleicht günstig im MX format. ;-)
 
Zuletzt bearbeitet:
Hi,

Dein Problem ist, dass sich die Positionierungen überlappen, da fast gleichzeitig ein rollOut und ein rollOver auf dem neuen Button ausgeführt wird. Eine einfache Lösung wäre, statt den aktiven Button abzufragen, einfach die Funktion "butt_pos" rauszuwerfen und die Positionen laufend mit einer globalen onEnterFrame-Methode zu setzen:
PHP:
this.onEnterFrame = function() {
	bild1._x = bild2._x - bild2._width / 2 - bild1._width / 2;
	bild3._x = bild2._x + bild2._width / 2 + bild3._width / 2;
}
(Du musst den Ankerpunkt von "bild1" auch in dessen Mitte setzen)

Wenn die Buttons nun noch auf der Bühne zentriert werden sollen, würde ich sie komplett in einen MC namens "menue" setzen (Ankerpunkt mittig), den Du komplett verschieben kannst.

Zudem hast Du noch einige kleinere Fehler in Deiner Funktion "butt_scale":

- "hauptmenü.aktiv" sollte m.E. nur gesetzt werden, wenn "modus" = true ist

- die onEnterFrame-Methoden der Buttons musst Du mit
PHP:
delete this.onEnterFrame
löschen, da Du die Aktion ja von innerhalb der onEnterFrame-Methode aufrufst (wo this = clip ist).

Gruß
.
 
Danke für deine Antwort, Datic!

Ich werde mir deine Vorschläge mal ansehen und testen. Ich habe aber noch folgende Fragen, die ich schon jetzt stellen kann:

1. So wie ich das sehe, ist ein globales onEnterFrame, dass immer läuft, sehr unpraktisch, weil leistungsintensiv. Ist es nicht performance-technisch von Vorteil, wenn man onEnterFrame-Events nur zeitlich begrenzt ausführen lässt, auch wenn das vielleicht einen Mehraufwand bedeutet?

2. Macht es wirklich einen Unterschied, ob man nun onEnterFrames relativ (this) oder absolut (clip = _root.bildx) löscht? Bei mir hat beides funktioniert.

Gruss
 
Hi,

zu 1.: Prinzipiell schon, aber nicht bei dieser geringen Auslastung. Ein onEnterFrame ansich braucht nicht viel Ressourcen, und da, sobald sich die Buttons nicht mehr bewegen, nichts mehr großartig berechnet werden muss, solltest Du damit keine Probleme bekommen. Natürlich kannst Du die Bewegungen der Buttons in der onEnterFrame tracken und die Methode beim Stillstand löschen; bei einem RollOver kannst Du sie dann neu starten.

zu 2.: Das macht eigentlich keinen Unterschied, außer, dass Du bei Änderungen Deiner Struktur u.U. mehr zu ändern hast. Allerdings meine ich gesehen zu haben, dass Du die Methode in Deiner Datei nicht absolut (mit _root) ansprechen wolltest.

Gruß
.
 
Hallo!

@Datic:

Ich habe deine Vorschläge eingebaut. Damit der Effekt auch wirklich so aussieht, wie ich mir das vorgestellt hatte, muss man tatsächlich alle Buttons in einen MC packen und diesen dann verschieben. Das ist mir auch gelungen, allerdings höchst unzufriedenstellend.
Mein Problem ist nun eher mathematischer Art:
Ich muss einen Wert für die x-Endposition generieren, damit der Effekt auch wirklich hieb- und stichfest funktioniert. Dieser Wert muss vor der Definition des onEnterFrames stehen und sich aus den Breite- bzw. den x-Werten des gescalten MC's zusammensetzen, bloss komm ich nicht auf die Lösung.

In der geposteten (und geputzten) fla findet ihr folgenden Script-Ausschnitt:

PHP:
_root.menü_mc._x = menüx + 2*(myx - clip._x);
			/*var xdiff = Newmenüx - _root.menü_mc._x;
			xspeed += xdiff/difNum;
			xspeed *= speedNum;
			_root.menü_mc._x += xspeed;*/

Der aktive Teil ist die Methode, die ich selbst errechnete, die inaktive ist diejenige, die ich für besser halte, das Problem ist bloss die Definition des "Newmenüx"-Wertes. Er ist einmalig und das kleine dazugehörige Script lässt den menü_mc dorthin fahren.

Hoffentlich kann mir da jemand helfen

Gruss

Lukas
 

Anhänge

  • ver 1.zip
    6,1 KB · Aufrufe: 20
Hi,

ich würde das einfach ganz rausnehmen und dafür den Ankerpunkt des MCs "menü_mc" in dessen Mitte setzen. ;)

Wenn Du allerdings selbst für das Zentrieren sorgen willst (z.B. abgebremst), dann pack die nötigen Berechnungen auch in die globale onEnterFrame-Methode; dort kannst Du die Breite des Menüs erfragen und eine ensprechende Zielposition ansteuern.

Du wirst übrigens noch Methoden für ReleaseOutside oder dragOut benötigen - versuch mal, mit gedrückter Maustaste von einem zum anderen Clip zu gleiten:
PHP:
menü_mc.bild1.onRollOver = menü_mc.bild1.onReleaseOutside  = function() {

Gruß

P.S.: Die Verwendung von Umlauten in Bezeichnern halte ich für kritisch (wundert mich selbst ein wenig, dass Flash das erlaubt).
.
 
Das ganze klingt interessant, und ähnlich einer Geschichte, die ich nach grosser Zeit der Verzweiflung lösen konnte.
Könntest du die *.fla im MX Format posten, ich würd mir deine Lösung gern anschauen.
 
Nun, eine peinliche Frage:

@Datic:
Was genau meinst du mit Ankerpunkt bzw. wie setze oder verändere ich den?
Meinst du

1. den Punkt (0,0) im MC, von dem das Koordinatensystem des MC's ausgeht?

oder

2. den Punkt, den ich schieben kann, wenn ich im grafischen Scale-Modus bin?

Diese beiden Methoden habe ich nämlich ausprobiert, doch verändert hat sich nichts. Kommt da etwa ein AHA-Erlebnis auf mich zu?

Ich weiss schon, dass ich die anderen Events auch noch definieren muss, doch das ist wohl der kleinere Teil der (Denk-)Arbeit.

Gruss

PS zu deinem PS: Ich hatte noch nie Probleme mit Umlauten, mit Trunctations jedoch habe ich mich schon nächtelang rumgeschlagen. Daher verwende ich nach Möglichkeit deutsche Variable-Namen inkl. Umlaute.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück