{lang: 'de'}
Flashhilfe.de - Flash Community

einfache Kontroll-Abfrage mit AS3 [Flash 9]

 


AntwortenRegistrieren Seite1  

alex_delarge#1
Benutzerbild von alex_delarge
Beiträge: 19
Registriert: Jun 2010

23.06.2010, 11:25

Hi,

ich habe ein kleines Problem, bei dem ich eigentlich denke, dass ich weiß, wie man es machen müsste, es aber einfach nicht funktioniert :-). Ich habe die FLA  um die es geht, mal angehängt (es geht hier speiziell um Frame 2 der Hauptzeitleiste). Und zwar sollen in der finalen Version mehrere Enten auf der Bühne sitzen, jede ist ein separater Button, der einen andern Sound (ein Quaken in unterschiedlichen Tonhöhen) auslösen soll. Nun soll es also darum gehen, dass man "Alle meine Entchen" einmal durchspielen soll, das heißt, dass die Enten in der richtigen Reihenfolge geklickt werden müssen. Hierfür habe ich zunächst eine Kontrollvariable "i" auf 0 gesetzt. Jede Ente (d.h. jeder Button) erhält dann einen EventListener, der entsprechend dem jeweils geklickten Button das "i" auf einen anderen Zahlenwert setzen soll (also bspw. von 1 bis 6). Weiterhin habe ich einen MC erstellt, in dem die richtige Abfolge der zu drückenden Enten hinterlegt werden soll. Dabei handelt es sich um eine Note, die dann immer über dem Kopf der zu drückenden Ente angezeigt werden soll. Jeder Frame auf der Timeline des MC „noten“ enthält demnach die aktuell richtige Position der Note. So und nun gilt es also, abzufragen, auf welchem Frame man sich aktuell in „noten_mc“ befindet (ich hab das mit „currentFrame“ versucht) und das in einer if-else-Abfrage mit der Kontrolle der Variable „i“ zu verknüpfen. Stimmen Frame-Position und richtiger „i“-Wert überein, soll in „noten_mc“ der nächste Frame aufgerufen werden (sprich, die nächste zu spielende Note), andernfalls soll man bspw. wieder zum ersten Frame zurückspringen, um von vorn zu beginnen.

So, und hier nun mein Code dazu. Leider funktioniert es nicht und ich weiß leider nicht warum? Das "i" wird scheinbar richtig gesetzt, aber die if-else-Anweisung scheint nicht korrekt zu sein, oder?

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*Kontrollvariable*/

var i:int;
i = 0;
trace (i);

/*Kontrollvariable setzen*/

this.song_mc.song_enten_mc.ente1_btn.addEventListener(MouseEvent.CLICK,zaehler1);

function zaehler1 (event:MouseEvent):void {
     i=1;
  trace(i);
     }
   
/*Abfragen*/

this.song_mc.noten_mc.stop();

if (i == 1 && this.song_mc.noten_mc.currentFrame == 1) {
     this.song_mc.noten_mc.nextFrame ();
} else {
     this.song_mc.noten_mc.gotoAndStop (1)
}


Ich würde mich sehr freuen, wenn ihr mir helfen könntet. Vielen Dank!

P.S.: Falls noch jemand eine Idee hat, wie ich die Sprung-Animation der Ente, die momentan auf dem "gedrückt-Status" des Buttons liegt, durch einfachen Klick komplett abspielen kann, statt, wie es jetzt ist, die ganze Zeit die Maus gedrückt zu halten, wäre ich ebenfalls sehr dankbar. Ich habe es schon mit einem MC versucht, der pro Frame einen anderen Status einnimmt, aber das funktioniert leider nicht. Der entsprechende Code liegt auskommentiert ebenfalls auf Frame 2 der Hauptzeitleiste und der MC liegt als momentan ausgeblendete Ebene direkt über dem Button in "song_enten_mc". Vielen Dank!
Schlagwörter: currentFrame, if-else
Michi1986#2
Benutzerbild von Michi1986
Beiträge: 113
Registriert: Sep 2009

23.06.2010, 14:08

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var a:int=0;
this.song_mc.song_enten_mc.ente1_btn.id=1;
this.song_mc.song_enten_mc.ente1_btn.addEventListener(MouseEvent.CLICK, zaehler);

function zaehler(E:MouseEvent){
     a = E.target.id;
 
          if(this.song_mc.noten_mc.currentFrame==a){
        this.song_mc.noten_mc.nextFrame ();
     }
     else{
        this.song_mc.noten_mc.gotoAndStop (1)
     }
       
}


Ich würde das ganz so lösen^^
Nachdem deine FLA leider nicht da ist kann ich dir aus dem Stehgreif leider nicht sagen wie du das mit der Maustaste löst.

MfG,

Michi
Geändert von Michi1986 am 23.06.10 um 14:09 Uhr
alex_delarge#3
Benutzerbild von alex_delarge
Beiträge: 19
Registriert: Jun 2010

Themenautor/in

23.06.2010, 14:47

hallo michi,

vielen dank für deine antwort. da ich noch rel. unfit in action script 3 bin, kann ich mit deinem code leider nur teilweise was anfangen. könntest du bitte nur ganz kurz erklären, was "_btn.id = 1" und "a = E.target.id;" machen und für was das "a" genau steht? diese befehle kenne ich leider gar nicht.

hm, das mit der FLA hat leider nicht geklappt. ich sehe gerade, dass es scheinbar an der dateigröße liegt, meine FLA is über 6mb ... könnte ich dir die evtl. sonst irgendwie zukommen lassen? das wäre super!

vielen Dank nochmal! :-)
Michi1986#4
Benutzerbild von Michi1986
Beiträge: 113
Registriert: Sep 2009

23.06.2010, 14:58

this.song_mc.song_enten_mc.ente1_btn.id=1;

Der Teil weist dem Button ente1_btn die id (Identifikator) 1 zu. Sprich die erste Ente bekommt id=1 die zweite Ente id = 2 usw usw usw



 a = E.target.id;

Das a ist einfach eine Variable zum abspeichern des jeweils gedrückten Buttons der sich hinter E.target versteckt. Sprich wenn du den Button ente1_btn drückst enspricht E.target == this.song_mc.song_enten_mc.ente1_btn wenn du den Button ente2_btn drückst entspricht this.target == this.song_mc.song_enten_mc.ente2_btn usw. Mit dem .id am Ende bekommst du so immer die ID des jeweils gedrückten Buttons.
alex_delarge#5
Benutzerbild von alex_delarge
Beiträge: 19
Registriert: Jun 2010

Themenautor/in

23.06.2010, 15:05

hi,

vielen dank. ok, alles klar. das ist dann quasi eine andere variante abzufragen, welcher button geklickt wurde. nun muss das ganze ja noch mit der abfrage verbunden werden, ob das auch der richtige button ist, sprich, das hängt dann immer von dem aktuellen frame des "noten_mc" ab (also bspw. bei frame 5 des "noten_mc" muss dann bspw. der button 3 geklickt werden und nur wenn beides stimmt, soll zum nächsten frame gegangen werden). wie könnte man das nun am besten abfragen, weil ich glaube, das ist auch der hauptteil der bei mir nicht funktioniert (also meine currentFrame-Anfrage) ...
Michi1986#6
Benutzerbild von Michi1986
Beiträge: 113
Registriert: Sep 2009

23.06.2010, 15:17

na ganz einfach. Nehmen wir mal an du hast im noten_mc die Frames 1, 3, 6, 7 an denn es stopt und der nächste Button gedrückt werden muss. Dan gibst du ente1_btn.id=1, ente2_btn.id=3, ente3_btn.id=6, ente4_btn.id=7.

Schon fertig... ^^
alex_delarge#7
Benutzerbild von alex_delarge
Beiträge: 19
Registriert: Jun 2010

Themenautor/in

23.06.2010, 16:28

also nachdem ich dann nochmal genauer in dein skript geschaut hatte, ist mir dann doch noch aufgefallen, dass damit schon abgefragt werden kann, ob der aktuell gedrückte button / die buttonID auch dem richtigen und in dem fall ja numerisch gesehen gleichen frame im "noten_mc" entspricht :-). nur ist es leider so, dass es ja insgesamt nur 6 buttons für verschiedene Noten geben soll, die dann aber auch mehrmals in der richtigen reihenfolge gedrück werden müssen (die gleichen noten werden ja im lied mehrfach gespielt). das heißt ich muss halt wirklich im "noten_mc" die exakte abfolge der noten von anfang bis ende des liedes ablegen (bspw.: frame 1: erste note, frame 2: fünfte note, frame 3: wieder erste note, etc. - das geht dann halt durch bis frame 20 oder so, wobei die einzelnen noten dann mehrfach vorkommen. ich würde dann die entsprechenden schlüsselbilder einfach in die frames weiter hinten wieder reinkopieren). dazu kommt dann auch, dass dadurch am ende ja auch feststeht, dass jetzt der letzte frame/die letzte note des liedes erreicht wurde und an der stelle dann nochmal code steht, der darauf verweist, dass jetzt das endbild des gesamten filmes aufgerufen werden soll.

also im prinzip würde das schon so gehen, nur, denke ich, dass es eben nochmal mit dem auslesen der aktuellen framenummer im "noten_mc" verknüpft werden muss, um eine eindeutige abfrage durchführen zu können. wie gesagt, theoretisch müsste es halt gehen. nur leider funktioniert die anweisung scheinbar nicht, dass zum nächsten frame im "noten_mc" gegangen werden soll. hast du mal in die FLA reingeschaut und gekuckt, woran das da evtl. liegen könnte? Vielen Dank!
Michi1986#8
Benutzerbild von Michi1986
Beiträge: 113
Registriert: Sep 2009

23.06.2010, 16:36

Also bei mir springt er auf die zweite Note

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2024 Sebastian Wichmann - Flashhilfe.de