Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-11-2005, 20:29   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 16
Question Generisches Menü

Hallo!

Da ich gerade neu dazu gekommen bin: erst mal ein herzliches Dankeschön an alle für die vielen hervorragenden Tips & Hilfen, die ihr hier bietet.

Aber nun habe ich ein Problem, wo ich nicht genau weiter weiß (bin allerdings auch noch Flash-Anfänger).
Also, ich habe mit dem unten angehängten Code mal versucht, eine Menüauswahl zu erstellen, bei der jede Instanz von mcMenuForm+Nr mit dem Rechteck Former umrandet wird. Via MouseUp übergebe ich dann den Namen mit Nr. des geklickten mcMenuForm zur weiteren Abfrage (und so sieht’s aus: siehe Anhang).
Nun habe sehr viele Menühintergründe wie in der angehängten Beispieldatei, die ich alle innerhalb einer swf-Datei miteinander verlinken möchte – wenn möglich, über eben diese Menüroutine.
Also, immerhin könnte ich jetzt schon pro Bild je einen Menühintergrund plazieren mit den entsprechenden mcMenuForm-Instanzen drauf und dem MouseUp-Script, das um Sprungbefehle zu den anderen Bildern ergänzt werden müßte, damit die Verlinkung funktioniert.

Aber könnte man das nicht viel besser über Actionscript bewerkstelligen? Irgendwie habe ich das Gefühl, das könnte viel Aufwand sparen (es sind nämlich wirklich viele verschiedene Hintergründe), aber ich komme nicht so recht auf eine Idee.

Wer wüßte, wie man das machen könnte?

Über jegliche Hinweise oder Hilfe würde ich mich riesig freuen!





Code:
mSpeed = 20;
/* je hoeher, je langsamer die Bewegung */
MovieClip.prototype.mMove = function() {
	if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
		mXTarget = this._x;
		mYTarget = this._y;
		mWTarget = this._width;
		mHTarget = this._height;
		mGo = true;
	}
	Former._x += (mXTarget-Former._x)/mSpeed;
	Former._y += (mYTarget-Former._y)/mSpeed;
	Former._width += (mWTarget-Former._width)/mSpeed;
	Former._height += (mHTarget-Former._height)/mSpeed;
};
MovieClip.prototype.aMove = function() {
	if (mGo == true) {
		this._x += (mXTarget-this._x)/mSpeed;
		this._y += (mYTarget-this._y)/mSpeed;
		this._width += (mWTarget-this._width)/mSpeed;
		this._height += (mHTarget-this._height)/mSpeed;
		mGo = false;
	}
};
for (nNum=1; nNum<=75; nNum++) {
	/* max. Anzahl der versch. Menu-Punkte */
	_root["mcMenuForm"+nNum].onEnterFrame = function() {
		this.mMove();
	};
}
_root.Former.onEnterFrame = function() {
	this.aMove();
};

MovieClip.prototype.onMouseUp = function() {
	if (this.hitTest(_root._xmouse, _root._ymouse)) {
		str = "mcMenuForm"; 
		str2 = String(this._name);
		str3 = str2.substring(0, 10); // Länge von "mcMenuForm"
		if (str == str3) {
			// getURL(str2) // Übergabe an Director oder
			// Befehl für neue Menüseite
		} else {
			// hier alles, wenn kein Menü-Element geklickt wurde
		}
	}
};
Angehängte Dateien
Dateityp: zip menu-test.zip (48,0 KB, 31x aufgerufen)
Wright ist offline   Mit Zitat antworten
Alt 15-11-2005, 01:14   #2 (permalink)
Neuer User
 
Registriert seit: Sep 2004
Ort: Heidelberg
Beiträge: 37
visibility

Die einfachste Variante wären pro Menupunkt zwei Movieclips, die übereinander liegen: einer mit Hintergrund (z.B. menu01_bg.png) und einer ohne (menu01.png). Die Namen codierst Du in ein Array und arbeitest das Array mit einer einfachen for-Schleife ab. Für jeden Eintrag erzeugst Du
1. einen leeren Movieclip (createEmptyMovieclip())
2. setzt ihn an die richtige Stelle (movieclip._x = ..., movieclip._y = ...),
3. lädst das Bild des aktuellen Eintrags in diesen Clip (movieclip.loadMovie(Eintrag)).
Das ganze wiederholst Du jetzt für den zweiten Eintrag (in dem fall menu01.png), aber setzt danach noch
4. movieclip2._alpha = 100;
Das macht den zweiten Movieclip (ohne Hintergrundbild) unsichtbar.

Jetzt baust Du einfach noch in deine MouseUp-Funktion ein "movieclip2._alpha = 0" ein. Dadurch wird neben dem Kästchen um den Menupunkt der erste Movieclip (mit Hintergrund) sichtbar, weil der daraufliegende Movieclip (ohne Hintergrund) ja nicht mehr sichtbar ist.

Gruß,
Lars

Ps: Für einen Flashanfänger sieht Dein Movie schon echt klasse aus.

Geändert von icebaer (15-11-2005 um 01:15 Uhr)
icebaer ist offline   Mit Zitat antworten
Alt 15-11-2005, 10:27   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 16
Thumbs up

Hallo Lars!

Ganz großen Dank für Deine Hilfe. Mir scheint, daß ist genau der Ansatz, den ich gesucht habe. Das werde ich heute nach der Arbeit (bin als Admin tätig) gleich ausprobieren. Ich glaube, vom Prinzip habe ich es auch schon verstanden, allerdings könnte es sein, daß ich an der Umsetzung noch ganz schön feilen muß, 1000x in der Hilfe nachschlagen etc., wie es halt meist so ist, wenn man noch ganz am Anfang steht, gerade eines so ungeheuer komplexen Programms wie Flash. - Wenn ich dann etwas nicht so richtig schaffen sollte, könnte dann hier noch einmal nach eventuellen Details nachfragen?
- Dazu eine kleine Frage schon mal vorweg (sozusagen aus dem Trockenen heraus, da ich es erst heute abend in Flash selber ausprobieren kann): Wie code ich den den Array zurecht? (Mir fehlt da leider noch die Erfahrung mit der richtigen Syntax ...)


Zitat:
Für einen Flashanfänger sieht Dein Movie schon echt klasse aus.
-> Boah, vielen Dank dafür, ich habe auch echt lange dran gesessen, überhaupt erst mal die Grundlagen, die ich dafür brauchte, aus der Flash-Hilfe herauszukitzeln, was nicht ganz einfach war. - Aber besonders dieses Forum hat mir oft an den entscheidenen Stellen weitergeholfen. Ich bin echt froh, daß es hier so regen Austausch gibt.

Geändert von Wright (15-11-2005 um 10:31 Uhr)
Wright ist offline   Mit Zitat antworten
Alt 15-11-2005, 13:12   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 16
Question

Hm, noch eine kleine Nachfrage: Wie muß ich das eigentlich machen, daß ich pro Menüpunkt zwei die mcs habe?

Geändert von Wright (15-11-2005 um 14:15 Uhr)
Wright ist offline   Mit Zitat antworten
Alt 16-11-2005, 06:22   #5 (permalink)
Gimbel Deluchs
 
Registriert seit: Apr 2004
Ort: Wieder da!
Beiträge: 153
Talking

Also Array Syntax geht so;
PHP-Code:
var meinArray:Array = new Array();
meinArray = ["eins""zwei""drei""..."];
trace(meinArray[2]);
// Ausgabe: drei 
um z.B. zwei unterschiedliche Hintergrundbilder für mehrere Buttons zu erstellen:

PHP-Code:
// Hier speicherst Du die mit Hintergrund
var mitBG:Array = new Array("mitbg1.jpg""mitbg2.jpg""mitbg3.jpg");
// Hier speicherst Du die ohne Hintergrund
var ohneBG:Array = new Array("ohnebg1.jpg""ohnebg2.jpg""ohnebg3.jpg");
// Hier speicherst Du Deine MCs um später noch auf sie zugreifen zu können
var buttons:Array = new Array();
for (var 
0i<mitBG.lengthi++) {
    
// Huelle machen
    
var mc:MovieClip this.createEmptyMovieClip("container_mc_"+ii);
    
// Referenz auf Huelle in Array speichern
    
buttons.push(mc);
    
// Erstes bild laden
    
mc.createEmptyMovieClip("ohnebg"2);
    
loadMovie(ohneBG[i], mc.ohnebg);
    
// Zweites bild laden
    
mc.createEmptyMovieClip("mitbg"1);
    
loadMovie(mitBG[i], mc.mitbg);
    
// Zum Positionieren z.B. sowas
    
mc._x 30;
    
mc._y 30+(i*mc._height)+(i*5);
    
// Button draus machen
    
mc.onRollOver = function() {
        
this.ohnebg.swapDepths(this.mitbg);
    };
    
mc.onRollOver = function() {
        
this.ohnebg.swapDepths(this.mitbg);
    };
    
mc.onRelease = function() {
        
// irgendwas, z.b. auf die Hauptzeitleiste zugreifen
        
this._parent.functionAufrufen();
        
//oder
        
this._parent.gotoAndStop(15);
    };

Hoffe das hilft.
Mr.Dauerfeuer ist offline   Mit Zitat antworten
Alt 16-11-2005, 15:06   #6 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 16
Question Leider immer noch ein etwas ratlos ... (grumpf)


Hallo!

Vielen Dank für die Hilfe, Mr.Dauerfeuer! Ich weiß zwar nicht, ob die Umsetzung für einen Erfahrenen wie Dich schwierig war: aber ich hätte dafür bestimmt ewig gebraucht! Immerhin habe ich den Code wenigstens nachvollziehen können.
Aber irgendwie weiß ich trotz dieser prima Vorgaben noch immer nicht, wie ich diese mit meinem Code richtig verbinde.

Bisher habe ich ja lauter einzelne Schlüsselbilder mit jeweils einem Hintergrundbild und der Routine, die mit jeder Button-Instanz auf enterFrame das Former-Kästchen jener angleicht. Auf MouseUp prüfe ich, ob ein Button-mc 'darunter' liegt. Die Nummer dieses mcs frage ich dann ab, um via gotoAndPlay zu dem Flashbild mit dem entsprechenden Hintergrund zu springen.
Wenn ich jetzt, wie oben vorgeschlagen, statt des gotoAndPlay einfach den Hintergrund auf der Basis des angelegten Arrays wechsele, habe ich pro Button-mc zwar das Ereignis Bild anzeigen / verbergen.
Aber wie springe ich denn dann zu den anderen Hintergrundbildern (mit deren Button-Instanzen)?
Irgendwie werde ich das Gefühl nicht los, da etwas ganz grundsätzlich noch nicht verstanden zu haben ...

Vielleicht habe ich mir da für einen Anfänger wie mich doch etwas zu viel vorgenommen? Oder sehe ich den Wald vor lauter Bäumen einfach nicht?

Viele Grüße von
Nick



p.s.: Falls jemand mal schauen möchte, wie die FLA bisher aussieht: HIER habe ich sie zum Download hinterlegt.
Wright ist offline   Mit Zitat antworten
Alt 17-11-2005, 03:58   #7 (permalink)
Gimbel Deluchs
 
Registriert seit: Apr 2004
Ort: Wieder da!
Beiträge: 153
kann leider deine fla nicht oeffnen, hab nur flash mx2004, hastes vielleicht mit flash 8 gespeichert? wenn ja einfach nochmal als flash 7 speichern.

lg
Mr.Dauerfeuer ist offline   Mit Zitat antworten
Alt 17-11-2005, 09:01   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 16
Exclamation Jetzt auch im MX2004-Format gespeichert ...

Hallo,

ok, jetzt habe ich die Datei auch als Flash7 abgespeichert: HIER nämlich.
Dann müßte sie sich eigentlich öffnen lassen.

Gruß,
Wright
Wright ist offline   Mit Zitat antworten
Alt 18-11-2005, 00:47   #9 (permalink)
Gimbel Deluchs
 
Registriert seit: Apr 2004
Ort: Wieder da!
Beiträge: 153
Also ich hoffe ich hab richtig verstanden was du willst. Wenn Du ein paar Buttons so verlinken willst das sich z.B. der Hintergrund ändert, kann man das so machen wie in Deiner fla. Sprich je nach gedrücktem Button springt dein Flash Film auf ein entsprechendes Bild.

Wenn Du allerdings nach einem dynamischen Ansatz suchst, solltest Du folgendermaßen vorgehen.

1. Dein Film hat EIN Bild (nur eins!)
2. in diesem Bild liegen deine Buttons
3. in diesem Bild liegt eine art Container ( ein leerer MovieClip )
4. z.B. in einem Array speicherst Du welcher Content zu welchem Button gehört
5. Wenn einer der Buttons geklickt wird, lädst du in Deinen Container den entsprechenden Content

Content kann entweder extern oder intern (in der fla) abgelegt werden. Um internen zu laden musst du den Symbolen on der Bibliothek über "Verknüpfen" einen Bezeichner zuweisen und dann die Symbole per "attachMovie" auf die Bühne holen. Wenn Du externen Content hast lädst du diesen z.B. über "loadMovie('nameDerDatei', zielMovieClip)", wirf mal einen Blick in die Hilfe und guck nach "MovieClipLoader".

Hab Dir Deine Fla mal umgebaut und einen dynamischen Ansatz verfolgt.

Gruss MrD
Angehängte Dateien
Dateityp: rar vorlage_2004.rar (5,3 KB, 18x aufgerufen)
Mr.Dauerfeuer ist offline   Mit Zitat antworten
Alt 18-11-2005, 14:44   #10 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 16
Thumbs up


Hai, MrDauerfeuer!

Bin noch auf der Arbeit, aber habe gerade Deine Antwort entdeckt. So richtig in Ruhe anschauen kann ich mir's erst heute abend zu hause, aber schon mal riesigen Dank für Deine Mühe! - Phantastisch, daß Du mir schon so viel weiter geholfen hast!
Und ja genau, doch, Du hast mich so verstanden, wie ich es meinte. - So weit meine myopen Anfängeraugen schauen können, ist das auch die richtige Richtung, das dynamisch umzusetzen.
Eine kleine Frage tut sich allerdings so zwischendurch für mich jetzt schon auf:
Leider habe ich nämlich für einige Gruppen von den Seiten (es sind insgesamt immerhin satte 500 Hintergründe ungefähr) ein weiteres Problem:
Sie weisen unterschiedliche Anzahlen und Formen von Menüpunkten auf und sollen, wenn das überhaupt generisch umsetzbar ist, auch noch innerhalb jeweils einer Seite unterschiedlich gefärbte Former haben (also z. B. links oben ein Menü mit Rechtecken und einem grauen Umrander und auf derselben Seite rechts unten ein Menü mit kleinen Quadraten und einem roten Umrander).
Wie ließe sich denn das bloß in der - ansonsten genau richtigen - dynamischen Variante, die Du so klasse vorgelegt hast, auch noch einbauen?

Ich hoffe sehr, daß das jetzt nicht zu weit führt oder in von mir ungeahnte Untiefen der AS-Programmierung, aber vielleicht ist es ja ok, wenn ich dennoch einfach mal vorsichtig weiter nachfrage.

Nachher, wenn ich von der Arbeit zurück bin, schaue ich mir auf jeden Fall alles noch mal genauer an, vielleicht schaffe ich es ja, da einen kleinen Ansatz herauszufinden.

Oder ist das evtl. doch gar nicht so realisierbar?

Vielleicht hast Du oder jemand sonst ja noch einen Tip in diese Richtung oder so ...

Melde mich später wieder, sobald ich wenigstens ein paar Schritte weiter bin ...
Wright ist offline   Mit Zitat antworten
Alt 20-11-2005, 15:52   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 16
Unhappy ... schon lange & viel probiert, aber immer noch nicht weiter ...


Hallo, da bin ich wieder ...

Inzwischen habe ich doch so Einiges versucht (im natürlich begrenzten Rahmen meiner Anfänger-Möglichkeiten), aber ich finde einfach keinen funktionstüchtigen generischen Ansatz, mit dem ich (aufsetzend auf Mr.Dauerfeuers Vorgabe)

pro Menüblatt-Hintergrund-Container:
- verschieden viele Menüpunkte
- mit verschiedenen Umrander-Farben je Gruppe von Menüpunkten
hinbekomme.

Die größte Hürde stellt für mich die Hauptschleife dar, die für jedes Menüblatt so flexibel sein müßte, daß ich mit entsprechenden Parametern die in Anzahl und Form verschiedenen Menüpunkte pro Blatt generieren kann. Ich vermute, daß die Ursache dafür meine mangelnde Erfahrung nicht nur mit AS im allgemeinen, sondern besonders mit OOP ist, da ich mit 'klassisch-linearen' Programmiermethoden bei dieser Aufgabe einfach nicht weiter komme.

Ich bin inzwischen völlig aufgeschmissen und komme trotz Flashhilfe, einiger Lehrbücher und der Hilfe hier immer noch nicht weiter, obwohl ich jetzt eigentlich schon verstanden habe, wie es im Prinzip gehen könnte.

Hat jemand vielleicht noch eine Idee, die mir auf die Sprünge helfen könnte?


Viele Grüße von

Nick
Wright ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele