Wie Funktion aufrufen - Sliding

  • Hi,


    ich steh gerade aufm Schlauch, aber ich habe eine Funktion, die ich aufrufen
    möchte, wenn ich einen Button klicke.


    Beim Klick auf den Button soll ein anderer MC mittels TransitionManager Class
    aus dem sichtbaren Bereich der Bühne verschoben werden. Die Funktion klappt
    einwandrei, wenn ich ein onRelease direkt auf den MC lege, der verschwinden
    soll. Allerding möchte ich diese Funktion eben nicht direkt auf dem betroffenen
    MC haben, sondern eben von einem anderen aurufen.


    Code:


    ausführender Button > btn1

    Code
    1. btn1.onRelease = function() {
    2. //setzt vari auf single, falls so, wird im v4 swf eine andere func ausgeführt
    3. btn1.gotoAndPlay(9);
    4. btn2.gotoAndPlay(16);
    5. btn3.gotoAndPlay(22);
    6. btn4.gotoAndPlay(31);
    7. //hier sollte der Aufruf für slideLeft erfolgen, angewand auf 4 MCs
    8. }


    Wie muss ich die Func hier schreiben, damit sie ausgeführt wird?


    Zum Schluss würde mich noch interessieren, wie man all die gotoAndPlays
    zusammenfügen kann, weil ich ein und denselben Aufruf bei mehreren Button
    habe (hier verschwinden die Buttons nämlich wieder). Dasselbe wäre ja auch
    bei der slideLeft Func, weil ich die auch gleichzeitg auf 4 MCs anwenden
    müsste.


    Vielen Dank
    Elli

    Es gibt keinen Fortschritt ohne den Glauben an die Zukunft.
    [JFK]

  • Hallo Elli,


    wenn ich das jetzt richtig Verstanden habe, meinst du sowas:

  • Hallo Wanderratte,


    schon mal vielen Dank! Durch das Zusammenfassen in ein Array wird das schon
    viel übersichtlicher :)


    Jetzt habe nich noch 2 Fragen:
    1.:

    Code
    1. var obj = btArray[i][0];
    2. obj.gotoAndPlay (btArray[i][1]);


    Das [i] steht ja für die im Array gespeicherten MCs. Was aber wird mit [0],
    bzw. [1] genau bewirkt?


    2.:
    Leider klappts mit der Slide-Func, so wie sie jetzt ist, noch nicht wirklich.
    Es wird zwar geslided, aber dummerweise alles > mcArray + btArray. Es soll
    ja aber nur das, was im mcArray ist, von der Bühne verschwinden. Ne Idee,
    warum er alle nimmt?

    Es gibt keinen Fortschritt ohne den Glauben an die Zukunft.
    [JFK]

  • Hallo Elli,
    also [btn1, 9] ist ein mehrdimensionales Array,
    Wenn du zum Beispeil
    trace(btArray[0]) schreibst kriegst du folgende Ausgabe btn1, 9
    bei trace(btArray[0][0]) folgende btn1 und bei trace(btArray[0][1]) = 9
    Bildlich gesehen, erstellst du damit ein Array im Array und es wird genaus behandelt wie ein normales Array und fängt bei 0 an.


    So der erste Wert enthält den Namen des Button, der zweite Wert wohin er gehen soll.
    var obj = btArray[i][0];
    Ist nicht unbedingt Notwendig, aber ich mache es so aus Grunde der Übersichtlichkeit.
    Du kannst alternativ auch ein Assoziatives Array nehmen, die Syntax würder wie folgt lauten:


    Kurz zu Erklärung:
    Du setzt innerhalb des Arrays
    var btArray:Array = new Array ({button:btn1, goto:9, button:btn2, goto:16, button:btn3, goto:22, button:btn4, goto:22});
    Variablen, die du dann ausliest. Bei größeren Arrays mit mehreren Werten ist es nach meiner Meinung einfacher zu Händeln, weil man dann die Stellen nicht abzählen brauch und jede Position einen Namen hat und auch sofort weißt was drin stehen sollte. Auch kann sich die Reihenfolge ändern und du kriegst trotzdem immer den Richtigen Wert ;)

  • Fein, damit wäre Frage eins tip top beantwortet :)


    Wenn dir jetzt noch ne Idee zu Frage 2 einfallen würde ;) ...

    Es gibt keinen Fortschritt ohne den Glauben an die Zukunft.
    [JFK]

  • Hänge mal die Fla hier dran, ich kann den Fehler nicht reproduzieren.
    Die Function


    Steuert einmal das Tweening für die MCs und sollte die Button abspielen.

  • So, nach einem Tipp von Wanderratte, hat sich das Problem nun gelöst. Ich
    hatte mich nur auf die Arrays und so konzentriert und einen wichtigen Part
    außer Acht gelassen:

    Code
    1. MovieClip.prototype.slideLeft = function ():Void {
    2. var begin:Number = this._x;
    3. var end:Number = -400;
    4. slideTween = new Tween (this, "_x", func, begin, end, duration, true);
    5. };


    Aus der slideLeft Func musste ein Prototyp erstellt werden, da sonst _level0
    geslidet wird, also die ganze Bühne und nicht nur die gewollten MCs.


    Nochmals Dank für die Hilfe :)

    Es gibt keinen Fortschritt ohne den Glauben an die Zukunft.
    [JFK]