 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Fragen stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
02.09.2007, 23:53
|
#1
|
|
TP-Senior
Registriert seit: Feb 2006
|
Movieclips ansteuern mit setInterval oder Math.random
Guten Abend alle zusammen,
habe den ganzen Abend das Forum und das WWW durchstöbert, aber keine zufriedenstellende Antwort auf meine Frage bekommen.
Ich habe auf der Bühne 9 einzelne Movieclips platziert. Wichtig ist hier, daß sie alle eigenständige MC's also keine immer wiederkehrenden Instanzen von einem Bibliotheks-MC sind. Dann würde ich ja eher mit attachMovie arbeiten.
Aber in dem Fall ist es wichtig, daß jeder MC seinen festen Platz hat.
Jetzt möchte ich diese MC's einzeln über ActionScript ansprechen, damit jeder in seinem eigenen Rhythmus immer mal wieder auf der Bühne erscheint.
Ich habe mit Math.random und setInterval rumgetrickst, brachte aber nicht den gewünschten Erfolg. Für mehrere Instanzen von einem Haupt-MC gibt es genug Beispiele, für mein Problem kriege ich die aber nicht umgestrickt.
Hätte einer von Euch eine Idee?
Lg Anja
|
|
|
03.09.2007, 00:09
|
#2
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Schreibe Dir doch einfach eine function, die die gewünschte Veränderung vornimmt (AlphaTween, Rotation, Verschiebung, ...) und nutze folgende function um unterschiedliche Intervalle zu erreichen.
Mit weiteren Prüfungen, z.B. dass eine Veränderung schon zu ende ist, kann Du ja umgehen, dass erneut zu früh aufgerufen wird.
PHP-Code:
function randRange(min:Number, max:Number):Number { var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min; return randomNum; }
setTimeout(veränderungFunction, randRange(2000, 8000));
|
|
|
03.09.2007, 06:34
|
#3
|
|
TP-Moderator
Registriert seit: Mar 2002
|
Hallo Anja,
wenn ich es richtig verstehen, hast du ein Problem damit, die MC per Random anzusprechen ?
Dann versuche mal folgendes:
PHP-Code:
var filmArray:Array = new Array("instanzname1","instanzname2","instanzname3","instanzname4","instanzname5","instanzname6") function deineFunction () { var obj = filmArray[random(filmArray.length)] trace(obj) } var intervallID = setInterval(deineFunction,2000)
|
|
|
03.09.2007, 08:45
|
#4
|
|
TP-Senior
Registriert seit: Feb 2006
|
Guten Morgen,
@Mark
Ich glaube, in der Variante habe ich auch schon mal was gelesen.
Kann es sein, daß das ebenfalls irgendwas zu tun hat mit der Erstellung eines
Prototypen, in dem man eine Funktion erstellt, die man auf verschiedene MC's anwenden kann?
@Ralf
Erstmal: 6.34 Uhr, was für eine unchristliche Uhrzeit!
Kann ich denn nicht nur einen Array bilden, wenn sich sämtliche Instanzen auch einen MC beziehen?
Hier habe ich aber neun komplett eigene MC's. Das heißt, ich habe in der Bibliothek nicht einen MC, der z.B. "rotate" heißt, von dem ich Instanzen auf die Bühne gezogen habe, die rotate0, rotate1 etc. heißen.
Bei mir liegen schon in der Bibliothek einzelne Mc's, die rotate1, rotate2 etc.
heißen.
Lg Anja
|
|
|
03.09.2007, 08:56
|
#5
|
|
TP-Moderator
Registriert seit: Mar 2002
|
Hallo,
in dem Array kannst du die Instanznamen eintragen, die du willst und haben nichts mit dem Namen in der Bibliothek zu tun.
In dem Array, kommen die Namen von den Objecten rein, die auf der Bühne liegen 
instanzname1 war in dem Falle nur ein Beispiel, du kannst auch home_mc,weiss_der geiger_mc usw. eintragen. Wichtig ist nur das die MCs auch die richtigen Instanznamen haben.
|
|
|
03.09.2007, 09:42
|
#6
|
|
TP-Senior
Registriert seit: Feb 2006
|
Hallo Ralf,
o.k. kapiert.
Wenn ich das jetzt richtig verstehe, starten die MC's zwar zufällig, aber immer nacheinander, also einmal der, einmal der der andere usw.
Ich möchte aber erreichen, daß alle ganz willkürlich auftauchen, d.h. es könnten auch drei MC's mit verschiedenen Startzeiten auf der Bühne erscheinen.
Es geht hier um einen Shooter, bei dem mal hier und mal da ein Gegner aus der Versenkung auftaucht, den man treffen muss. Deswegen auch die seperaten MC's, da ich hier auf der Zeitleiste der Clips mit Masken arbeite, da die Gegner hinter verschiedenen Objekten auftauchen.
Wenn dann immer nur ein Gegner auf der Bühne ist, wäre die Herausforderung natürlich nicht allzu groß.
Also denke ich, man müßte für jeden MC eine eigene Funktion definieren.
Lg Anja
|
|
|
03.09.2007, 12:36
|
#7
|
|
TP-Moderator
Registriert seit: Mar 2002
|
Hallo,
das kannst du doch einstellen, mit random und jenachdem wie schnell du aufrufst oder wie. Du brauchst ja auch kein intervall zu setzen.
das Beispiel zeigt die nur, wie du unterschiedliche MC per Zufall steuern kannst.
Du wirst es in deinem Fall eh noch verfeinern müssen, in dem du feststellt, welche MCs gerade abgespielt werden, welche frei sind usw.
|
|
|
03.09.2007, 14:32
|
#8
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
So, hier mal was Code zum rumspielen.
PHP-Code:
// Anzahl der MC auf der Bühne var mcArray:Array = new Array(mc1, mc2, mc3); // Fadegeschwindigkeit var fadeGeschw:Number = 3; //Min / Max Zeiten für Aktionen (im ms); var minTime:Number = 500; var maxTime:Number = 10000;
MovieClip.prototype.fade = function(a:String, g:Number):Void { this.action = a; this.geschwindigkeit = g; this.onEnterFrame = function() { if (this.action == 'aus' && this._alpha>0) this._alpha -= this.geschwindigkeit; if (this.action == 'aus' && this._alpha<=0){ inhalt[this._name].zustand = 0; delete this.onEnterFrame; } if (this.action == 'ein' && this._alpha<100) this._alpha += this.geschwindigkeit; if (this.action == 'ein' && this._alpha>=100) { setTimeout(makeIt, randRange(minTime, maxTime), 'aus', this); delete this.onEnterFrame; } } }
function makeIt(action:String, obj:MovieClip):Void{ switch(action){ case 'ein': obj._x = randRange(0 + (obj._width/2), Stage.width - (obj._width/2)); obj._y = randRange(0 + (obj._height/2), Stage.height - (obj._height/2)); obj.fade(action, fadeGeschw); break; case 'aus': obj.fade(action, fadeGeschw); break; } }
function randRange(min:Number, max:Number):Number { var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min; return randomNum; }
var inhalt:Object = new Object(); for (var i:Number = 0; i < mcArray.length; i++) { inhalt[mcArray[i]._name] = new Object(); inhalt[mcArray[i]._name].zustand = 0; }
this.onLoad = function(){ for(i in mcArray){ mcArray[i]._x = mcArray[i]._y = -200; _root.mcArray[i]._alpha = 0; } }
this.onEnterFrame = function(){ var zuffi:Number = randRange(0, mcArray.length-1); if(inhalt[mcArray[zuffi]._name].zustand == 0){ inhalt[mcArray[zuffi]._name].zustand = 1; setTimeout(makeIt, randRange(minTime, maxTime), 'ein', mcArray[zuffi]); } }
|
|
|
04.09.2007, 00:18
|
#9
|
|
TP-Senior
Registriert seit: Feb 2006
|
Habe mit beiden Vorschlägen rumgetüftelt und muss zu meiner Beschämung sagen - meine Movieclips ignorieren mich einfach
Sie ziehen einfach weiter unbeeindruckt ihre Bahn.
Es kann doch nicht so schwer sein so einem Clip kurz und prägnant zu sagen, versteck Dich ein bißchen und komm immer mal wieder raus wenn dir danach ist.
Das ist wie in den meisten Fällen wahrscheinlich wieder so eine winzige Kleinigkeit, die einen fast wahnsinnig macht.
Ich habe mal eine Mini-Version angehangen um den Zusammenhang zu verdeutlichen.
Lg Anja
Geändert von Angie3007 (11.10.2007 um 22:46 Uhr).
|
|
|
04.09.2007, 02:32
|
#10
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Ok, Ihr eingebildeten CS3 User, dann macht mal alleine weiter, ich bin raus. 
|
|
|
04.09.2007, 08:53
|
#11
|
|
TP-Senior
Registriert seit: Feb 2006
|
Ja, ist ja gut. Ich schäme mich schon. Habe es auch erst heute morgen gemerkt.
An das Runterkonvertieren denkt man nicht immer.
Aber auf die CS3-Version ist mir im Rahmen der Adobe Grace Period umsonst upgedatet worden. Am liebsten war mir immer noch das gute MX2004.
Im Anhang nochmal eine MX2004-Version.
Geändert von Angie3007 (11.10.2007 um 22:46 Uhr).
|
|
|
04.09.2007, 09:54
|
#12
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Na sooo schlimm wäre es nun auch nicht gewesen.
Ok MX2004, nun wolltest Du es aber wissen, was.
Hier dann mal ein Ansatz.
|
|
|
04.09.2007, 17:39
|
#13
|
|
TP-Senior
Registriert seit: Feb 2006
|
Mensch, Mark,
das bringt mich jetzt einen riesigen Schwung weiter !
Mit ActionScript tue ich mich definitiv etwas schwer.
Wenn ich jetzt z.B. Deinen Code durchgehe, kann ich das nachvollziehen und kapiere auch was da passiert. Aber wehe, ich soll mir eigenständig einen kompletten Code zusammenbauen.
Man findet meistens im WWW oder in Büchern Codefragmente, die zu einem sinnvollem Ganzen zu verbinden ist für den Anfänger schwierig.
Aber ich habe mal begonnen, solche Lösungsansätze für mich zu archivieren, damit ich mit der Zeit mal immer konkret was nachschlagen kann.
Wenigstens habe ich kapiert, wie man Masken verwendet, das hast Du mir vor grauer Vorzeit mal sehr gut nahe gebracht !
Lg Anja
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
| | |