#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); } ? + Multi-Zitat Zitieren
#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); } + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren