Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-08-2004, 10:24   #1 (permalink)
anwesend
 
Benutzerbild von TeeRackz
 
Registriert seit: Jun 2002
Ort: Manhattan an der Maas
Beiträge: 698
menue ausfahren

moinsen,
Baue grad ein Menü aus sieben schaltflächen.
Bei Klick auf eine Schaltfläche sollen die in der _y höhe darunter liegenden schaltflächen nach unten fahren, um ein untermenü freizugeben.
Wenn schon ein anderes Untermenue geöffnet ist, soll sich dieses schliessen, indem die entsprechenden Schaltflächen wieder hochfahren.
Mache das grade sehr umständlich über mehrere Abfragen.

Das Script fragt bei onPress ab, ob der darunterliegende mc bereits ausgefahren ist, wenn nicht fährt dieser nach unten bis der untere Rand der y-höhe des darüberliegenden mcs erreicht ist. Anschliessend werden alle anderen schaltflächen abgefragt, ob diese 20px unter der jeweils darüberliegenden schaltfläche liegen. wenn nicht fährt der entsprechende mc solange hoch, bis er 20 pixel unter der darüberliegenden schaltfläche ist.

dieses script liegt auf allen Schaltflächen mit der Änderung der jeweiligen Namen. Im Ergebnis fährt der zweite Btn runter und legt das erste Untermenue frei. Bei allen anderen Btns funktioniert es nicht
Hoffe das script und mein problem ist verständlich formuliert. gerne würde ich das script auch straffen.
__________________
imho

Geändert von TeeRackz (07-08-2004 um 18:25 Uhr)
TeeRackz ist offline   Mit Zitat antworten
Alt 07-08-2004, 17:59   #2 (permalink)
anwesend
 
Benutzerbild von TeeRackz
 
Registriert seit: Jun 2002
Ort: Manhattan an der Maas
Beiträge: 698
hier das script
PHP-Code:
on (press) {
    
this._parent.onEnterFrame = function() {
        if (
this.mc2._y<this.mc1._y+this.mc1._height) {
            
this.mc2._y Math.round(this.mc2._y+this.mc2._y*0.1);
        }
        if (
this.mc3._y>this.mc2._y+20) {
            
this.mc3._y Math.round(this.mc3._y-this.mc3._y*0.1);
        } else {
            
this.mc3._y this.mc2._y+20;
        }
        if (
this.mc4._y>this.mc3._y+20) {
            
this.mc4._y Math.round(this.mc4._y-this.mc4._y*0.1);
        } else {
            
this.mc4._y this.mc3._y+20;
        }
        if (
this.mc5._y>this.mc4._y+20) {
            
this.mc5._y Math.round(this.mc5._y-this.mc5._y*0.1);
        } else {
            
this.mc5._y this.mc4._y+20;
        }
        if (
this.mc6._y>this.mc5._y+20) {
            
this.mc6._y Math.round(this.mc5._y-this.mc5._y*0.1);
        } else {
            
this.mc6._y this.mc5._y+20;
        }
        if (
this.mc7._y>this.mc6._y+20) {
            
this.mc7._y Math.round(this.mc6._y-this.mc6._y*0.1);
        } else {
            
this.mc7._y this.mc6._y+20;
        }
        if (
this.mc8._y>this.mc7._y+20) {
            
this.mc8._y Math.round(this.mc6._y-this.mc7._y*0.1);
        } else {
            
this.mc8._y this.mc7._y+20;
        }
    };
    
trace(this._height);

__________________
imho
TeeRackz ist offline   Mit Zitat antworten
Alt 07-08-2004, 18:29   #3 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
hi!

poste mal bitte deine fla (als mx), oder ne beispiel fla.. nur mit dem code kann ich nicht viel anfangen...
aber um deinen code zu kürzen würde ich dir ne for schleife empfehlen:

ActionScript:
  1. on (press) {
  2.     this._parent.onEnterFrame = function() {
  3.         if (this.mc2._y<this.mc1._y+this.mc1._height) {
  4.             this.mc2._y = Math.round(this.mc2._y+this.mc2._y*0.1);
  5.         }
  6.         for (i=2; i<anz; i++) {
  7.             if (this["mc"+i]._y<this.mc1._y+this["mc"+(i-1)]._height) {
  8.                 this["mc"+i]._y = Math.round(this["mc"+i]._y+this["mc"+i]._y*0.1);
  9.             } else {
  10.                 this["mc"+i]._y = this["mc"+(i-1)]._y+20;
  11.             }
  12.         }
  13.     };
  14.     trace(this._height);
  15. }

grz
Robert
pape ist offline   Mit Zitat antworten
Alt 07-08-2004, 22:50   #4 (permalink)
anwesend
 
Benutzerbild von TeeRackz
 
Registriert seit: Jun 2002
Ort: Manhattan an der Maas
Beiträge: 698
Hi Robert, Fla poste ich gleich.
Danke für Dein Script
Sowas schwebte mir auch schon vor. Nur gibts bei dieser for-schleife ein Prob.
Für den ersten Button funktioniert das bestens, der Zweite hätte aber folgendes Script
PHP-Code:
on (press) { 
this._parent.onEnterFrame = function() { 
if (
this.mc3._y<this.mc2._y+this.mc2._height) { 
this.mc3._y Math.round(this.mc3._y+this.mc3_y*0.1); 


die For-Schleife sähe so aus
PHP-Code:
*for (i=3i<anzi++) { 
if (
this["mc"+i]._y<this.mc2._y+this["mc"+(i-1)]._height) { 
this["mc"+i]._y Math.round(this["mc"+i]._y+this["mc"+i]._y*0.1); 
} else { 
this["mc"+i]._y this["mc"+(i-1)]._y+20


Problem ist:
jetzt wird mc1 nicht mehr abgefragt und somit kann sich mc2 nicht positionieren, die Nummern der anzusprechenden mcs sind nicht fortlaufend i[1,3,4,5,6,7] und bei button drei wäre i[1,2,4,5,6,7] usw… kann man for-schleifen unterbrechen, oder sollte ich für jeden Button einen Array festlegen aus dem die einzelnen werte nacheinander i zugeordnte werden?
wie würde sowas mit arrays gehen?
wissensdurstiger AS-Anfänger wartet auf antwort.
Gruss,
Tee
__________________
imho

Geändert von TeeRackz (07-08-2004 um 22:52 Uhr)
TeeRackz ist offline   Mit Zitat antworten
Alt 07-08-2004, 22:56   #5 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
hi!
ich warte besser auf die fla, bevor ich weiteres sage, denn ich kann irgrndwie grade nicht nachvollziehen was du meinst...
aus einer for schleife kommst du mit break; raus!

bsp:
ActionScript:
  1. anz = 5;
  2. for (i=1;i<anz;i++) {
  3.     trace(i);
  4.     if(i==3) {
  5.         break;
  6.     }
  7. }
  8.  
  9. trace("fertig");
  10. //ausgabe:
  11. 1
  12. 2
  13. 3
  14. fertig
pape ist offline   Mit Zitat antworten
Alt 07-08-2004, 23:02   #6 (permalink)
anwesend
 
Benutzerbild von TeeRackz
 
Registriert seit: Jun 2002
Ort: Manhattan an der Maas
Beiträge: 698
hier die fla,
nicht erschrecken
die scripte liegen auf den dreiecken im kreis.
bisher nur für button eins und zwei (sind zwei verschiedene scripte)
die buttons liegen in der dritten tiefen ebene. wenn du diese fla testes siehst bestimmt sofort was ich bezwecken will (und leider auch den mir unerklärlichen fehler )
Gruss,
Tee
__________________
imho

Geändert von TeeRackz (07-08-2004 um 23:11 Uhr)
TeeRackz ist offline   Mit Zitat antworten
Alt 07-08-2004, 23:04   #7 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
Zitat:
Zitat von pape
deine fla (als mx), oder ne beispiel fla
->unerwartetes datei format...
pape ist offline   Mit Zitat antworten
Alt 07-08-2004, 23:10   #8 (permalink)
anwesend
 
Benutzerbild von TeeRackz
 
Registriert seit: Jun 2002
Ort: Manhattan an der Maas
Beiträge: 698
ups, sorry,
hier die mxer

Edit: gelöscht und weiter unten ne bereinigte abgelegt
__________________
imho

Geändert von TeeRackz (08-08-2004 um 00:00 Uhr)
TeeRackz ist offline   Mit Zitat antworten
Alt 07-08-2004, 23:26   #9 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
hmm.. ichblick noch nicht durch die stuktur durch, sorry...

was macht
ActionScript:
  1. var erste;
  2. if (erste=1) {
  3.     this.onEnterFrame = function() {
  4.         if (this.B._y<this.A._y+this.A._height) {
  5.             this.B._y += 2;
  6.         }
  7.     };
  8. }
naja.. was es macht ist klar, aber wo werden A und B bzw erste gesetzt?
und was soll
ActionScript:
  1. this._parent.rusty(this);
  2. this._parent._parent.mc_vorhang.gotoAndPlay(2);
  3. this._parent._parent.mc_vorhang.lader = [this._name+".swf"];
bezwecken?...hmmm
pape ist offline   Mit Zitat antworten
Alt 07-08-2004, 23:58   #10 (permalink)
anwesend
 
Benutzerbild von TeeRackz
 
Registriert seit: Jun 2002
Ort: Manhattan an der Maas
Beiträge: 698
Zitat:
Zitat von pape
hmm.. ichblick noch nicht durch die stuktur durch, sorry...

was macht
ActionScript:
  1. var erste;
  2. if (erste=1) {
  3.     this.onEnterFrame = function() {
  4.         if (this.B._y<this.A._y+this.A._height) {
  5.             this.B._y += 2;
  6.         }
  7.     };
  8. }
hmm das sind noch reste von meinen versuchen, ist bereinigt
Zitat:
naja.. was es macht ist klar, aber wo werden A und B bzw erste gesetzt?
und was soll
ActionScript:
  1. this._parent.rusty(this);
  2. this._parent._parent.mc_vorhang.gotoAndPlay(2);
  3. this._parent._parent.mc_vorhang.lader = [this._name+".swf"];
bezwecken?...hmmm
Das sind die Unterpunkte, die andere swfs in einen container laden. die button_instanzen heissen genau wie die swfs. mc_vorhang ist ne blende zwischen den einzelnen ladevorgängen. rusty(this) ruft ne funktion auf die aber nicht mehr vorhanden ist(reste von einer alten menueversion, ne art vertikales yugop. der guet rusty hatte mir damals ein wenig unter die Arme gegriffen)…… Ist aber für dieses Problem nicht wichtig.
Mir geht es um die Ebene darüber (das hoch und runterfahren der Oberpunkte). und die scripte die auf den kleinen dreiecken liegen und diese bewegung steuern sollen.
hab hier nochmal ne bereinigte version als mxer
Angehängte Dateien
Dateityp: zip menue_projekte2.fla.zip (13,3 KB, 49x aufgerufen)
__________________
imho
TeeRackz ist offline   Mit Zitat antworten
Alt 08-08-2004, 00:43   #11 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
so.. nach keine ahnung wieviel zeit, habe ich jetzt ne function für dich zusammengeschustert bekommen:

lösche alle buttonscripts ( von den buttons zum ausfahren)!

die kriegen nämlich alle die selbe aktion und das kann man dann auch bequem in ner for schleife von der zeitleiste aus machen (siehe script/fla)!

2 functions : eine zum einfahren und eine zum ausfhren

die functions sind nicht großartig noch mal durchgeguckt und optimiert!
aber sie funktionieren, soweit ich das getestet habe!

biddöö:
ActionScript:
  1. anzahl = 7; //anzahl an buttons
  2. speed = 5; //Aus-/Einfahrgeschwindigkeit
  3. abstand = 20; //abstand der buttons im eingefahrenen zustand
  4.  
  5. for (var i = 1; i<=anzahl; i++) {
  6.     this["mc"+i]["menue"+i].onPress = function () {
  7.         this._parent._parent.ausfahren(this._parent);
  8.     }
  9. }
  10.  
  11. function ausfahren (abmc) {
  12.     if (this.ausgefahrenermc) {
  13.         if (abmc == this.ausgefahrenermc) {
  14.             this.einfahren(abmc);
  15.         } else {
  16.             einfahren(this.ausgefahrenermc);
  17.             this.neuen_ausfahren = abmc;
  18.         }
  19.     } else if (!this.amausfahren) {
  20.         this.amausfahren = true;
  21.         var mc_nr = Number(String(abmc).slice(-1));
  22.         trace("es wurde mc"+mc_nr+" an geklickt");
  23.         this.createEmptyMovieClip("ausfahrer", 1964);
  24.         ausfahrer.onEnterFrame = function () {
  25.             var o = this._parent;
  26.             if (o["mc"+(mc_nr+1)]._y<abmc._y+abmc._height) {
  27.                 for (i=mc_nr+1; i<=anzahl+1; i++) {
  28.                     o["mc"+i]._y += speed;
  29.                 }
  30.             } else {
  31.                 delete this.onEnterFrame;
  32.                 o.ausgefahrenermc = abmc;
  33.                 o.amausfahren = false;
  34.                 this.removeMovieClip();
  35.             }
  36.         }
  37.     }
  38. }
  39.  
  40. function einfahren (abmc) {
  41.     var mc_nr = Number(String(abmc).slice(-1));
  42.     this.createEmptyMovieClip("einfahrer", 1964);
  43.     einfahrer.onEnterFrame = function () {
  44.         var o = this._parent;
  45.         if (this._parent["mc"+(mc_nr+1)]._y>abmc._y+abstand) {
  46.             for (i=mc_nr+1; i<=anzahl+1; i++) {
  47.                 this._parent["mc"+i]._y -= speed;
  48.             }
  49.         } else {
  50.             delete this.onEnterFrame;
  51.             delete o.ausgefahrenermc;
  52.             if (o.neuen_ausfahren) {
  53.                 ausfahren(o.neuen_ausfahren);
  54.                 delete o.neuen_ausfahren;
  55.             }
  56.             this.removeMovieClip();
  57.         }
  58.     }
  59. }
  60.  
  61. stop();
wenn du fragen hast dann frag einfach!

Gruß,
Robert

Edit:
mir ist schon was aufgefallen was überflüssig ist *gg*:

die erste if abfrage im einfahren script kann komplett raus!

habe die fla und das script aktualisiert (also so wie es jetzt da steht ists richtig!)

edit2: noch was kann raus
auch in der einfahren function:
ActionScript:
  1. ameinfahren = true;
  2. //...und
  3. o.ameinfahren = false;
einfach löschen

habe die fla und das script aktualisiert...!
Angehängte Dateien
Dateityp: zip menue_projekte_v2.zip (14,7 KB, 29x aufgerufen)

Geändert von pape (08-08-2004 um 00:54 Uhr)
pape ist offline   Mit Zitat antworten
Alt 08-08-2004, 01:04   #12 (permalink)
anwesend
 
Benutzerbild von TeeRackz
 
Registriert seit: Jun 2002
Ort: Manhattan an der Maas
Beiträge: 698
ohmann was soll ich da noch sagen? *dankendhändeschüttel*
skål
wenn ich die scripte sehe wird mir alles klar was da passiert, aber selber sowas konstruieren peil ich noch nicht.
kurzer check: 1964 ist die z-ebene in der du den neuen mc createst um genug puffer beim runterzählen zu haben oder? //
mmmhhh, jetzt ist es ja so das ein menue einfährt , anschliessend fährt das nächste aus. wie könnten beide vorgänge parallel ablaufen? also noch während das eine einfährt, fährt das andere aus.
__________________
imho
TeeRackz ist offline   Mit Zitat antworten
Alt 08-08-2004, 01:09   #13 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
Zitat:
Zitat von TeeRackz
kurzer check: 1964 ist die z-ebene in der du den neuen mc createst um genug puffer beim runterzählen zu haben oder?
ja! das ist ne x belibige zahl.. sollte nicht zu klein sein..

da fällt mir ein, dass es besser wäre beim ein (oder aus is egal) fahren script den mc auf 1965 (oder jedenfalls woanders) hinzulegen!
habe ich vergessen da ich die eine function per copy&past und dann leicht abwandeln erstellt habe ...grml... muss ich wohl besser aufpassen...hmm
Zitat:
Zitat von TeeRackz
mmmhhh, jetzt ist es ja so das ein menue einfährt , anschliessend fährt das nächste aus. wie könnten beide vorgänge parallel ablaufen? also noch während das eine einfährt, fährt das andere aus.
das habe ich eben auch überlegt, abe mir ist dazu irgendwie nicht direkt was eingefallen und dann habe ich es so gemacht!
Ich denk jetzt noch mal drüber nach und falls mir was einfällt sage ich dir natürlcih bescheid!

bis dann
Robert
pape ist offline   Mit Zitat antworten
Alt 08-08-2004, 01:28   #14 (permalink)
anwesend
 
Benutzerbild von TeeRackz
 
Registriert seit: Jun 2002
Ort: Manhattan an der Maas
Beiträge: 698
hey robert,
besten dank erstmal. wenn ich das von der theorie richtig überblicke, dann hängt die abfrage ob der einzufahrene mc schon eingefahren ist in einer schleife fest bis diese bedingung erfüllt ist, erst dann wird dem auszufahrendem mc mitgeteilt solange auszufahren bis seine grenzbedingung erreicht ist. oder ist das nonsense?
Tee
__________________
imho
TeeRackz ist offline   Mit Zitat antworten
Alt 08-08-2004, 01:38   #15 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
ja das ist richtig!

ersetz mal das script oder lad dir die (bald - wiel das grade nicht funktioniert ) angehängte fla runter!

is eigentlich recht easy mit dem glechzeitig ein und ausfahren

ActionScript:
  1. anzahl = 7; //anzahl an buttons
  2. speed = 5; //Aus-/Einfahrgeschwindigkeit
  3. abstand = 20; //abstand der buttons im eingefahrenen zustand
  4.  
  5. for (var i = 1; i<=anzahl; i++) {
  6.     this["mc"+i]["menue"+i].onPress = function () {
  7.         this._parent._parent.ausfahren(this._parent);
  8.     }
  9. }
  10.  
  11. function ausfahren (abmc) {
  12.     if (this.ausgefahrenermc) {
  13.         if (abmc == this.ausgefahrenermc) {
  14.             this.einfahren(abmc);
  15.         } else {
  16.             einfahren(this.ausgefahrenermc);
  17.         }
  18.         delete this.ausgefahrenermc;
  19.     } if (!this.amausfahren) {
  20.         this.amausfahren = true;
  21.         var mc_nr = Number(String(abmc).slice(-1));
  22.         trace("es wurde mc"+mc_nr+" an geklickt");
  23.         this.createEmptyMovieClip("ausfahrer", 1964);
  24.         ausfahrer.onEnterFrame = function () {
  25.             var o = this._parent;
  26.             if (o["mc"+(mc_nr+1)]._y<abmc._y+abmc._height) {
  27.                 for (i=mc_nr+1; i<=anzahl+1; i++) {
  28.                     o["mc"+i]._y += speed;
  29.                 }
  30.             } else {
  31.                 delete this.onEnterFrame;
  32.                 o.ausgefahrenermc = abmc;
  33.                 o.amausfahren = false;
  34.                 this.removeMovieClip();
  35.             }
  36.         }
  37.     }
  38. }
  39.  
  40. function einfahren (abmc) {
  41.     var mc_nr = Number(String(abmc).slice(-1));
  42.     this.createEmptyMovieClip("einfahrer", 1965);
  43.     einfahrer.onEnterFrame = function () {
  44.         var o = this._parent;
  45.         if (this._parent["mc"+(mc_nr+1)]._y>abmc._y+abstand) {
  46.             for (i=mc_nr+1; i<=anzahl+1; i++) {
  47.                 this._parent["mc"+i]._y -= speed;
  48.             }
  49.         } else {
  50.             delete this.onEnterFrame;
  51.             this.removeMovieClip();
  52.         }
  53.     }
  54. }
  55.  
  56. stop();

grz

Edit:
klene anmerkung:
hier bei ist es jetzt auch sehr wichtig, dass die einfahr und ausfahr mcs auf iunterschiedlichen tiefen liegen, da sonst der ausfahrer den einfarer ü+berschreibt und nicht zueinde eingefahren wird^^..das wollen wir ja nicht
Angehängte Dateien
Dateityp: zip menue_projekte_v3.zip (12,6 KB, 46x aufgerufen)

Geändert von pape (08-08-2004 um 02:00 Uhr)
pape 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 21:50 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele