Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-01-2004, 11:17   #1 (permalink)
°°°
 
Registriert seit: Oct 2003
Beiträge: 20
Funktion gleichzeitig mehrfach ausführen

Hallo,

ich habe ein Array (mcNames), in dem die Namen von 20 MCs gespeichert werden. Dazu habe ich ein Array (mcRaster), das entsprechende Positionskoordinaten enthält. Den MCs werden nun zufällig Koordinatenpaare zugeordnet und dann sollen sie dorthin bewegt werden. Wenn ich die Positionen direkt setze (siehe Code) habe ich kein Problem, sie sollen aber an die Position animiert werden. Ich weiß nicht, wie ich eine Funktion so einsetzen kann, dass sie solange (in sozusagen 20 Instanzen der Funktion) ausgeführt wird, bis die MCs ihre Positionen erreicht haben...

Vielen Dank im Vorraus!
ActionScript:
  1. do {
  2. rndMC = random ( mcNames.length );
  3. rndfPos = random ( mcRaster.length );
  4. rndPos = mcRaster[rndfPos];
  5.  
  6. positionedMC = mcNames[rndMC];
  7.  
  8. mcNames.splice(rndMC,1);
  9. mcRaster.splice(rndfPos,1);
  10. // Hier müsste die Funktion aufgerufen werden
  11. (eval(positionedMC))._x = rndPos[0];
  12. (eval(positionedMC))._y = rndPos[1];
  13. } while (mcRaster.length > 0);
fl0b0 ist offline   Mit Zitat antworten
Alt 22-01-2004, 11:31   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Könnte so aussehen:
ActionScript:
  1. MovieClip.prototype.move = function(targetX, targetY, delay) {
  2.     if (this._x != targetX || this._y != targetY) {
  3.         this.onEnterFrame = function() {
  4.             var difX =  - this._x + targetX;
  5.             var difY =  - this._y + targetY;
  6.             if (Math.round(Math.abs(difX)) > 0 || Math.round(Math.abs(difY)) > 0) {
  7.                 this._x += difX / delay;
  8.                 this._y += difY / delay;
  9.             } else {
  10.                 this._x = targetX;
  11.                 this._y = targetY;
  12.                 delete this.onEnterFrame;
  13.             }
  14.         };
  15.     }
  16. };
  17. //
  18. function randomPos() {
  19. for(var i = 0, i <= mcNames.length; i++) {
  20. var rndMC = mcNames.splice(Math.floor(Math.random()*mcNames.length, 1);
  21. var rndPos = mcRaster.splice(Math.floor(Math.random()*mcRaster.length, 1);
  22. _root[rndMC].move(rndPos[0], rndPos[1], 7);
  23. }
  24. }
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 22-01-2004, 11:47   #3 (permalink)
°°°
 
Registriert seit: Oct 2003
Beiträge: 20
hi sonar,

vielen Dank, muss ich erst mal in meinen 2 Gehirnwindungen durchwalken... und dann mal einbauen.
fl0b0 ist offline   Mit Zitat antworten
Alt 22-01-2004, 13:38   #4 (permalink)
°°°
 
Registriert seit: Oct 2003
Beiträge: 20
@sonar,

habe jetzt mal ein bisschen dran rumgezimmert, aber es funktioniert leider immer noch nicht...
an der prototype habe ich nichts verändert, die verstehe ich auch nicht so hundertprozentig...
ich wäre sehrsehr dankbar, wenn du das nochmal nachschauen könntest, oder vielleicht hat ja noch jemand einen tipp...?
sieht bei mir jetzt so aus:
ActionScript:
  1. function randomPos() {
  2.         for(i = mcNames.length; i > 0; i--) {
  3.            
  4.                 rndMC = random ( mcNames.length );
  5.                 rndfPos = random ( mcRaster.length );
  6.                 rndPos = mcRaster[rndfPos];
  7.  
  8.                 positionedMC = mcNames[rndMC];
  9.                 //trace (positionedMC);
  10.                 //trace (rndPos);
  11.                 mcNames.splice(rndMC,1);
  12.                 mcRaster.splice(rndfPos,1);
  13.                 // trace (this[positionedMC]);           
  14.                 this[positionedMC].move(rndPos[0], rndPos[1], 7);
  15.         }
  16. }
fl0b0 ist offline   Mit Zitat antworten
Alt 22-01-2004, 14:49   #5 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
So gehts:
ActionScript:
  1. var numMCs = mcNames.length;
  2. //
  3. function randomPos() {
  4.     for (var i = 1; i <= numMCs; i++) {
  5.         var rndMC = mcNames.splice(Math.floor(Math.random() * mcNames.length), 1);
  6.         var rndPos = mcRaster.splice(Math.floor(Math.random() * mcRaster.length), 1);
  7.         _root[rndMC].move(rndPos[0][0], rndPos[0][1], 7);
  8. //die 7 kannst uebrigens anpassen, das is die "Bremse"
  9.     }
  10. }
Ich hätts doch testen sollen...

1. Klammerfehler waren drin, sowohl {} als auch ()

2. rndPos ist seltsamerweise ein Array, welches als einziges Element wieder ein Array mit den Koordinaten enthält... deshalb der Zugrif mit [0][0]

3. Die Länge von mcNames muss man zwischenspeichern, weil die Funktion ja Elemente rauskickt

Die Prototyp-Methode bleibt unverändert.
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 22-01-2004, 15:09   #6 (permalink)
°°°
 
Registriert seit: Oct 2003
Beiträge: 20
@sonar,
danke nochmal für deine antwort


die flüchtigkeitsfehler hatte ich auch schon bemerkt und entsorgt...
bei mir ist eher das problem, dass das von meiner ebene aus nicht funktioniert.

also statt
ActionScript:
  1. _root[rndMC]...
habe ich
ActionScript:
  1. this[rndMC]...
gesetzt und dann gehts nicht... im debugger sehe ich, dass die anderen parameter an die prototype-methode übergeben werden, nur das "this" bleibt ohne wert...?
fl0b0 ist offline   Mit Zitat antworten
Alt 22-01-2004, 16:02   #7 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
"this" bezieht sich halt immer auf das aktuelle Objekt/die aktuelle Zeitleiste, d.h. du musst die Zeitleiste angeben, in der deine zu bewegenden MCs leben...
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist offline   Mit Zitat antworten
Alt 22-01-2004, 16:09   #8 (permalink)
°°°
 
Registriert seit: Oct 2003
Beiträge: 20
ist schon klar, aber es funktioniert einfach nicht...
wenn ich aus der zeitleiste, in denen meine mcs leben mit this arbeite, müsste es doch klappen, oder sehe ich das falsch?
wenn ich das ganze trace ist es ja auch korrekt.
ich muss jetzt eben die struktur des films ändern, habe lange genug daran rumgepopelt...
trotzdem muchas gracias!
fl0b0 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele