[Flash/AS] Button mit Random-Keyframe-Funktion

Dieses Thema im Forum "Webentwicklung" wurde erstellt von reeL, 28. September 2011 .

Schlagworte:
  1. 28. September 2011
    Button mit Random-Keyframe-Funktion

    Hiho, hoffe ich bin hier richtig.
    Und zwar würde ich mir gerne das Kunstgeschichte lernen vereinfachen, indem ich mit Flash sozusagen "Karteikärtchen" mache. Mit einem Klick möchte ich dabei immer auf einen zufälligen Keyframe gelangen.
    D.h. jeder Keyframe = ein Karteikärtchen.

    mit einer ausnahme allerdings: der erste keyframe ist so eine art startseite, und die sollte nicht mehr aufgerufen werden.

    hab auch genau das passende gefunden und es klappt auch in der funktion.
    aber so richtig versteh ichs noch nicht.

    siehe hier:
    jump to random frame

    nehmen wir mal an, ich habe ingesamt 5 keyframes, wobei der erste davon ausgeschlossen werden soll.
    wie lautet jetzt der exakte code? nicht dass am ende ein frame ausgelassen wird :S

    on (release) {
    gotoAndStop(random(5)+2);
    }

    ?
     
  2. 28. September 2011
    AW: Button mit Random-Keyframe-Funktion

    random(5) = 0,1,2,3,4
    random(4)+2 = 0(2),1(3),2(4),3(5)

    Code:
    on (release) {
    gotoAndStop(random(_root._totalframes-1)+2);
    }
    
     
  3. 29. September 2011
    AW: Button mit Random-Keyframe-Funktion

    AAAH jetzt check ichs, okay.
    Danke Dir!

    Noch eine Frage:

    Ich denke, das wäre jetzt nicht mehr so einfach machbar, aber ich frag trotzdem:
    Wäre es möglich, dass die gezogene Karteikarte, sprich der per Zufall gewählte Keyframe, beim nächsten Zug nicht mehr drankommen kann? Sodass jede Karteikarte letztlich nur einmal vorkommt und am Ende keine Karte mehr übrig bleibt?
     
  4. 29. September 2011
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Button mit Random-Keyframe-Funktion

    1. code kommt in dein 1. frame
    2. ein button mit instanz "btn" anlegen, das über alle frames geht
    3. fertig
    Code:
    stop();
    function newKart() {
     // erstellen
     _root.kartAr = [];
     for (i=2; i<=_root._totalframes; i++) {
     _root.kartAr.push(i);
     }
     // mischen
     var laenge = kartAr.length;
     _root.kartShuffle = [];
     for (var i = 0; i<laenge; i++) {
     zufall = Math.floor(Math.random()*(laenge-i));
     _root.kartShuffle[i] = kartAr.splice(zufall, 1);
     }
     trace(_root.kartShuffle);
    }
    
    function getNextKart() {
     // prüfen ob fertig
     if (_root.kartShuffle.length<=0) {
     _root.newKart();
     }
     // next position
     nextKart = _root.kartShuffle.shift();
     trace(_root.kartShuffle);
     return nextKart;
    }
    _root.btn.onRelease = function() {
     goto = _root.getNextKart();
     _root.gotoAndStop(goto);
    };
    _root.newKart();
    
    // edit
    erklärung zum ganzen:
    es soll per button (instanz 'btn') zufällig zu einer frameposition gesprungen werden.
    dazu ermittel ich erstmal die anzahl der frames mit _totalframes und packe die in einen array
    Code:
    _root.kartAr = [];
    for (i=2; i<=_root._totalframes; i++) {
     kartAr.push(i);
    }
    
    ich beginne bei frame 2 (i=2), da frame 1 der startscreen ist.
    nun mische ich diesen array.
    Code:
    var laenge = kartAr.length;
    _root.kartShuffle = [];
    for (var i = 0; i<laenge; i++) {
     zufall = Math.floor(Math.random()*(laenge-i));
     kartShuffle[i] = kartAr.splice(zufall, 1);
    }
    
    ich packe das alles in eine function, da man so immer neu beginnen kann, wenn das array leer ist.
    Code:
    function newKart() {
     // erstellen
     _root.kartAr = [];
     for (i=2; i<=_root._totalframes; i++) {
     _root.kartAr.push(i);
     }
     // mischen
     var laenge = _root.kartAr.length;
     _root.kartShuffle = [];
     for (var i = 0; i<laenge; i++) {
     zufall = Math.floor(Math.random()*(laenge-i));
     _root.kartShuffle[i] = _root.kartAr.splice(zufall, 1);
     }
     trace(_root.kartShuffle);
    }
    
    nun soll der button bei onRelease (klick) mir aus dem gemischten array die nächste position ausgeben.
    Code:
    nextKart = _root.kartShuffle.shift();
    trace(_root.kartShuffle);
    return nextKart;
    
    mit shift() bekomme ich immer das 1. element vom array und entferne diesen auch.
    da mein array irgenwann leer ist prüfe ich vorher um ggf. die karten neu zu erstellen.
    Code:
    if (_root.kartShuffle.length<=0) {
     _root.newKart();
    }
    
    das alles pack ich auch in eine function
    Code:
    function getNextKart() {
     // prüfen ob fertig
     if (_root.kartShuffle.length<=0) {
     _root.newKart();
     }
     // next position
     nextKart = _root.kartShuffle.shift();
     trace(_root.kartShuffle);
     return nextKart;
    }
    
    so jetzt fehlt nur noch die action für den button.
    wir benötigen ein element (mc) mit der instanz btn und lassen im per onRelease
    ermitteln was der nächste frame ist und per gotoAndStop() dort hin springen.
    Code:
    _root.btn.onRelease = function() {
     goto = _root.getNextKart();
     _root.gotoAndStop(goto);
    };
    
    mein benötigter array ist beim starten nicht vorhanden, daher initialisiere ich das ganze.
    Code:
    _root.newKart();
    
    das war's.
    gust du hier (flash cs4)
    No File | www.xup.in
     
  5. 30. September 2011
    AW: Button mit Random-Keyframe-Funktion

    Cool, sehr aufschlussreich
    Aber mir ist da gerade was aufgefallen.
    Hab mir mal bei deinem Beispiel die 5 rausgepickt und immer wieder die klicks abgezählt, bis sie wieder kommt. manchmal kommt sie aber zu früh? eben grad kam sie nach 4 oder 5 klicks und ein anderes mal nach 13 klicks.
    sollte es nicht so sein, dass die zahl zurückgelegt wird und erst wieder dran kommt, wenn die restlichen zahlen alle dran kamen?
     
  6. 4. Oktober 2011
    AW: Button mit Random-Keyframe-Funktion

    _root.newKart();

    es wird wieder neu gemischt sobald ein druchlauf zu ende ist.
    schau dir mal das trace an, das zeigt dir die ausgaben an.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.