Rahmen einausblenden

Leugim

Erfahrenes Mitglied
Hi...
Ich habe vor mir eine Flash Seite zu bauen... Ideen Habe ich schon ein paar und dass "haupt aussehen" steht auch schon.

Nun will ich, dass bei klick auf einen der (drei) Buttons ein rahmen (später mit inhalt) eingeblendet wird.

Ich habe mir also einen rahmen gebastelt und diesem ein Animation zugewiesen, die ihn einblendet und wieder ausblendet.
Am ersten, im mitlleren und im letzten Frame stoppt der mc jeweils.

Nun hab ich den buttons gesagt, dass sie bei click den frameMC Abspielen sollen, wobei dann ja automatisch beim nächsten stop gestoppt wird... wodurch sich ergibt, dass bei einmaligem klicken der Rahmen auftaucht und beim zweiten verschwindet.

Problem am ganzen ist nun, dass wenn ich auf button eins klcike, der rahmen auftaucht aber auch verschwindet, wenn ich button zwei anklicke....
Das ist aber nicht soooo furchtbar guenstig... Eigentlich will ich, dass der rahmen "merkt", von welchem Button der erste Klick kommt und von welchem der zweite, um zu merken, ob er (der Rahmen) auch wieder verschwinden darf oder nicht.

da hatte ich die Idee, dass die Buttons bei on (release) der Variable a einen jeweils anderen Wert zuweisen. Button 1 setzt a=0 button2 a=1 usw....
und da dachte ich mir in der mitte des RahmenMC's ein script einzubauen, der bemerken soll, ob sich a im vergleich zum vorherigen clicken verändert hat, oder nicht. ich dachte da an:

1.Frame des rahmenMC's:
b = _root.a
//um den wert den der button uebermittelt hat, aufzunehmen.

mittlerer frame:
stop();

letzter frame:
if (_root.a - b != 0) {
gotoAndPla(2);
//hier soll gecheckt werden, ob der urspruenglich wert von a, also jetzt b immernoch mit dem wert von vorhin uebereinstimmt....

nur irgendwie funktioniert das nicht :mad:. Wer hat da besseren durchblick als ich und kann mit da weiterhelfen?
Danke
 
Hi,

Dein Ansatz macht schon Sinn - nur würde ich in dem Rahmenclip eine Funktion namens "ChangeContent()" schreiben, die den neuen Wert übergeben bekommt. Stimmt der neue Wert mit dem alten Wert (die globale Variable für den aktuellen Inhalt) überein, so wird der Rahmen ausgeblendet (gotoAndPlay(ausblendbild)) und die globale Variable auf 0 gesetzt. Andernfalls wird lediglich der Inhalt des Rahmens geändert und die globale Variable bekommt den Wert der übergebenen Variable. Ist beim Aufruf der Funktion die globale Variable gleich 0 (sprich: kein Inhalt sichtbar), so wird der Rahmen eingeblendet (gotoAndPlay(einblendbild)).

Gruß
 
da dachte ich doch.....

Da dachte ich doch......
dass ich's kapiert häte.... ähhhh Wie muss den der Script fuer die ChangeContent() function lauten?
Ich kriege es nicht richtig hin, den alten mit dem neuen wert zu vergleichen...
Muss die o.g Function in den mittleren Frame des rahmenMC's?
 
:-) tja, wenn man sich seiner Unordnung schämen muss... tröste Dich, das geht (fast) allen die ersten Monate so (hättest mal meine ersten Dateien sehen sollen).

Also, ich poste hier keine editierte Version, da (und das kann in meinen Augen wirklich zum Problem werden) der Film (ohne Inhalte) über 500 KB groß ist ... versuch mal ein Auge auf Modemnutzer zu haben und geh etwas sparsamer mit Bitmaps um. ;)

Fürs erste: Setze in das Objekt "mcframe" eine Neue Ebene und gib dort in etwa folgendes Script ein:
PHP:
if (_root.currentContent==undefined) _root.currentContent=0;
// in dieser Variable wird der aktuelle Content gespeichert
function setContent(nc) { // nc ist die Nummer des neuen Contents
    if (nc!=0) {
        if (_root.currentContent==0) {
            this.gotoAndPlay(1); // Einblenden
        }
        if (_root.currentContent==nc) {
            nc=0;
            this.gotoAndPlay(5); // Ausblenden
        }
    } else {
        if (_root.currentContent!=0) {
            this.gotoAndPlay(5); // ebenfalls ausblenden, kann ja sein, dass es auch einen
                                                // Button zum "Abschalten" gibt
        }
    }
    _root.currentContent=nc; // Aktuellen Content neu setzen
}
Auf die Buttons käme dann lediglich folgender Code (hier am Beispiel von Button 1):
PHP:
on (release) {
    _root.frame.setContent(1);	
}
Wenn Du einem Button die Contentnummer 0 gibst, wird der Rahmen ausgeblendet.

Wichtig: lass das Objekt "frame" von Anfang an sichtbar (_visible=true)!

Gruß
 
na dann.... muss wohl echt noch an Sauberkeit arbeiten...
Wie handles du das denn mit der Dateigroesse?
Habe das Tutorial "Allgemeine Tipps zu Veringerung der Dateigröße" gefunden... Werde das wohl "wälzen" muessen, um an annehmbare Dateien zu kommen...:-)


vielen Dank fuer den Code... Der funktioniert einwandfrei!

Mir ist die erste if-Schleife recht schleierhaft... ist das eine Abreviation des normalen if scripts?

Wieso benutzt du mal if und mal else?
Habe bei Flash nicht so richtig verstanden, wo der Unterschied zwischen zwei if-Schleifen hintereinander und einer if-Schleife mit if-else liegt....

edit: Hab die .swf auf 346kb runter... immer noch viel, oder?
 
Zuletzt bearbeitet:
Hi,

- die "Sauberkeit" ist eigentlich garnicht das Problem gewesen. Problematisch kann eine Erweiterung immer dann werden, wenn zu viele Dinge in (Haupt-)Zeitleistenanimationen vorliegen. Meiner Erfahrung nach ist eine Flashanwendung am wartungsfreundlichsten, wenn alles so weit wie möglich in Objekte "verpackt" ist - im Idealfall hast Du dann auf der Hauptzeitleiste 1 Frame und höchstens 2 Ebenen. ;)

- Es gibt keine if-Schleifen :-) , bloß if-Bedingungen. Meinst Du die oberste Zeile? Wenn nur eine Aktion ausgeführt werden soll, kann man das auch prima in eine Zeile ohne geschweifte Klammern setzen. In der ersten Zeile wird Deine globale Variable auf 0 gesetzt, falls sie noch nicht definiert ist.

- "else" ist optional und wird als "Alternative" verwendet. Übersetz mal:
Code:
WENN (a < b) DANN: {
    schreibe "a ist kleiner b"
} SONST: {
   schreibe "a ist nicht kleiner als b";
}

- 346 KB - da darf ich eigentlich nicht mehr meckern, schließlich ist meine private Seite mit ihren 350 KB auch nicht grade sparsam... womit ich allerdings unzufrieden bin, obwohl es eben "nur" eine private Seite ist. Zum Vergleich: meine neue (kommerzielle) Seite ist nur 30 KB groß - zumindest die Hauptdatei.
Dabei habe ich einfach völlig auf importierte Bitmaps verzichtet - was natürlich nicht immer geht, aber oft kommt z.B. eine Grafik nur leicht abgeändert an mehreren Stellen vor - dann kannst Du reduzieren und etwaige Änderungen aus Vektoren bauen...

Gruß
 
Zuletzt bearbeitet:
Wäre das denn im meinem Fall moeglich?
Ich hab' schon häufiger Seiten gesehen, in welchen es offensichtlich war, dass sie Bitmaps einsetzten ... Der preloader zeigte trotzdem nur 45kb oder so an.... Inhalt war sofort da Bilder ein paar sekuendchen später. Musik sowieso getrennt.... Sind das Anzeichen dieser "intelligenten" Preloader?
Wird da auch mit php rumgespielt?

Uebersetzung:

if (a<b){
trace "a ist kleiner b";
} else {
trace "a ist nicht kleiner b";
}

geht das auch mit der verkuerzten variante?

if (a<b) trace "a ist kleiner b";
else trace "a ist nicht kleiner als b";
Warscheinlich nicht... sieht irgendwie komisch aus...

P.S Entschuldige, wenn ich morgens nicht antworte... liegt daran, dass ich in Argentinien 5stunden später morgens habe und von daher wascheinlich gerade erst in der Heia bin, wenn ihr alle schon "da" seid (oder gerade aufwacht) :-)
 
Zuletzt bearbeitet:
Zurück