Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-02-2004, 17:51   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 5
Question Schweif hinter einem bewegten Objekt?

Hi,

es geht um den Lichtpunkt in dem Oszillator auf der Seite:

www.modular-planet.de/_aspekte/oszillator.html

Der Lichtpunkt soll einen Schweif hinter sich herziehen. Das 'Mausschweifbeispiel' funktioniert hier anscheinend nicht. Der Lichtpunkt bewegt sich mit Hilfe einer x-/y-Positionierung und der Flashfilm besteht aus nur einem Bild. Ich habe schon Verschiedenes ausprobiert, aber den Schweif noch nicht hinbekommen :-((

__________________
Joffes
Josef Müller ist offline   Mit Zitat antworten
Alt 15-02-2004, 18:06   #2 (permalink)
Flash & TYPO3
 
Registriert seit: Oct 2003
Ort: Bayern
Beiträge: 2.700
Wie soll denn der Schweif aussehen? Der selbe 'MC' der langsam transperent wird?
johanness ist offline   Mit Zitat antworten
Alt 15-02-2004, 18:55   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 5
Ja, eigentlich mit duplicateMovieClip. Aber wenn ich eine Schleife konstruiere, passiert nicht viel...

Die Schleife sieht so aus:

if (i<10) {
duplicateMovieClip("Leuchtpunkt", Leuchtpunkt+i, i);
i++;
} else {
i = 0;
}

Die Schleife steht in einer - onClipEvent (enterFrame) {...} - Anweisung.
__________________
Joffes

Geändert von Josef Müller (15-02-2004 um 19:00 Uhr)
Josef Müller ist offline   Mit Zitat antworten
Alt 15-02-2004, 18:59   #4 (permalink)
Flash & TYPO3
 
Registriert seit: Oct 2003
Ort: Bayern
Beiträge: 2.700
Zeig doch einfach mal deinen Ansatz!
johanness ist offline   Mit Zitat antworten
Alt 15-02-2004, 19:07   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 5
Mit duplicateMovieClip und der 'onClipEvent (enterFrame)'-Schleife (s.o.) sollte bei jedem Frame (hier 24/Sek) ein Duplikat erzeugt werden. Da sich der Leuchtpunkt bewegt, sollte er doch die Duplikate hinter sich herziehen... Das eben klappt aber nicht!

__________________
__________________
Joffes
Josef Müller ist offline   Mit Zitat antworten
Alt 17-02-2004, 03:00   #6 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: Köln
Beiträge: 106
Hab Dir mal was gebastelt... nicht zuletzt weil ich Oszillatoren mag. :-)
Angucken kannste das hier: www.khm.de/~leif/klimbim/glowchain.swf.

Das Listing ist hoffentlich recht durchschaubar und so angelegt, dass es wurscht ist, wie der MovieClip "point0" bewegt wird; die anderen folgen ihm dann. Deshalb auch Click&Drag als Bewegungsalternative. Damit das Listing läuft, brauchst Du noch irgendeinen GrafikClip in der Bibliothek, der als "point" für ActionScript verknüpft ist.

ActionScript:
  1. /*** PREFS ***/
  2. _quality = "low";
  3. screenwidth = screenheight = 600;
  4. speed = 0.2;
  5. tailSegs =60;
  6.  
  7. /*** INIT ***/
  8. screenwidth_half = screenwidth/2;
  9. screenheight_half = screenheight/2;
  10.  
  11. /*** FUNCTIONS ***/
  12. startPoint = function () {
  13. // ersten point erzeugen und lostreten
  14.     attachMovie ("point", "point0", 1);
  15.     point0.mamacount = 0;
  16.     point0.onEnterFrame = moveMe;
  17. }
  18.  
  19. moveMe = function () {
  20. // point0 irgendwie bewegen
  21.     this.mamacount+=speed;
  22.     this._x = Math.sin (this.mamacount/25)*screenwidth_half+screenwidth_half;
  23.     this._y = Math.cos (this.mamacount/9)*screenheight_half+screenheight_half;
  24. // egal, wie Du point0 bewegst, diese beiden Zeilen sind notwendig und müssen
  25. // onEnterFrame ausgeführt werden, damit die anderen points folgen können!
  26.     this.x_before = this._x;
  27.     this.y_before = this._y;
  28. }
  29.  
  30. startTail = function () {
  31. // baut den Schweif und tritt ihn los
  32.     var i = tailSegs; while (--i>0) {
  33.         attachMovie ("point", "point" add i, 10+tailSegs-i);
  34.         this["point" add i].id = i;
  35.         this["point" add i]._alpha = 100-100/tailSegs*i;
  36.         this["point" add i].onEnterFrame = followPoint;
  37.     }
  38. }
  39.  
  40. followPoint = function () {
  41. // durch diese Funktion bewegt sich der Schweif: die "veralteten" Koordinaten werden von Clip zu Clip durchgereicht
  42.     this.x_before = this._x;
  43.     this.y_before = this._y;
  44.     var parentClip = _root["point" add (this.id-1)];
  45.     this._x= parentClip.x_before;
  46.     this._y= parentClip.y_before;
  47. }
  48.  
  49. dragMe = function () {
  50. // Notwendige Datenerzeugung bei Dragging von point0
  51.     this.x_before = this._x+random(6)-3;
  52.     this.y_before = this._y+random(6)-3;;
  53. }
  54.  
  55. /*** MOUSELISTENER ***/
  56. mouseInput = {};
  57. mouseInput.onMouseDown = function () {
  58.     point0.startDrag(true);
  59.     point0.onEnterFrame = dragMe;
  60. }
  61. mouseInput.onMouseUp = function () {
  62.     point0.stopDrag();
  63.     point0.onEnterFrame = moveMe;
  64. }
  65.  
  66. /*** PROGRAM ***/
  67. Mouse.addListener(mouseInput);
  68. startPoint();
  69. startTail();
  70. stop();
__________________
http://www.rumbke.de
leif ist offline   Mit Zitat antworten
Alt 17-02-2004, 10:41   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 112
Bei den Script wird beim Start in der oberen Ecke nochmal das Objekt erzeugt...wie geht das weg? So dass also nur noch der eigentliche Effekt zu sehen ist...
habda eben schon rumprobiert, aber hat nicht geklappt...
cyberboy ist offline   Mit Zitat antworten
Alt 17-02-2004, 12:39   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: Köln
Beiträge: 106
Ok, dafür braucht's noch ne Detailänderung. Beispiel wie gehabt auf www.khm.de/~leif/klimbim/glowchain.swf.

Listing:
ActionScript:
  1. /*** PREFS ***/
  2. _quality = "low";
  3. screenwidth = screenheight = 600;
  4. speed = 0.2;
  5. tailSegs = 60;
  6.  
  7. /*** INIT ***/
  8. screenwidth_half = screenwidth/2;
  9. screenheight_half = screenheight/2;
  10.  
  11. /*** FUNCTIONS ***/
  12. startPoint = function () {
  13.     attachMovie ("point", "point0", 1);
  14.     point0.mamacount = 0;
  15.     point0.x_before = point0._x = Math.sin (0)*screenwidth_half+screenwidth_half;
  16.     point0.y_before = point0._y = Math.cos (0)*screenheight_half+screenheight_half;
  17.     point0.onEnterFrame = moveMe;
  18.    
  19. }
  20.  
  21. moveMe = function () {
  22.     this.mamacount+=speed;
  23.     this._x = Math.sin (this.mamacount/25)*screenwidth_half+screenwidth_half;
  24.     this._y = Math.cos (this.mamacount/9)*screenheight_half+screenheight_half;
  25.     this.x_before = this._x;
  26.     this.y_before = this._y;
  27. }
  28.  
  29. dragMe = function () {
  30.     this.x_before = this._x+random(6)-3;
  31.     this.y_before = this._y+random(6)-3;;
  32. }
  33.  
  34. startTail = function () {
  35.     var i = tailSegs; while (--i>0) {
  36.         attachMovie ("point", "point" add i, 10+tailSegs-i);
  37.         var tmpClip = this["point" add i];
  38.         tmpClip.id = i;
  39.         tmpClip._alpha = 100-100/tailSegs*i;
  40.         tmpClip._x= tmpClip._x_before = _root.point0._x
  41.         tmpClip._y= tmpClip._y_before = _root.point0._y
  42.         tmpClip.onEnterFrame = followPoint;
  43.    
  44.     }
  45. }
  46.  
  47. followPoint = function () {
  48.     this.x_before = this._x;
  49.     this.y_before = this._y;
  50.     var parentClip = _root["point" add (this.id-1)];
  51.     this._x= parentClip.x_before;
  52.     this._y= parentClip.y_before;
  53. }
  54.  
  55. mouseInput = {};
  56. mouseInput.onMouseDown = function () {
  57.     point0.startDrag(true);
  58.     point0.onEnterFrame = dragMe;
  59. }
  60. mouseInput.onMouseUp = function () {
  61.     point0.stopDrag();
  62.     point0.onEnterFrame = moveMe;
  63. }
  64.  
  65. /*** PROGRAM ***/
  66. Mouse.addListener(mouseInput);
  67. startPoint();
  68. startTail();
  69. stop();
__________________
http://www.rumbke.de
leif ist offline   Mit Zitat antworten
Alt 17-02-2004, 12:49   #9 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 112
Super!!! Danke ;-)
cyberboy ist offline   Mit Zitat antworten
Alt 19-02-2004, 20:00   #10 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 5
Hallo leif,

> Hab Dir mal was gebastelt...
>nicht zuletzt weil ich Oszillatoren mag. :-)

:-)))

danke für das Script, es funktioniert! Zwei Probleme gibt es allerdings noch: Ich kann den Schweif nicht hinter einer Maske ablaufen lassen und bei den Schwingungsformen Saw und Pulse macht er die Sprünge nicht mit. Letzteres werde ich wohl beheben können, indem ich aus den Sprüngen Bewegungen mache (mal sehn...). Aber der Schweif legt sich immer vor die Maske... :-((

PS
Bei mir dauert die Umsetzung noch etwas: Ich bin erst seit einigen Monaten mit Flash zugange und 'Der Oszillator' ist meine erste Animation mit Action Script...
Deinen Studiengang finde ich übrigens sehr interessant!
__________________
Joffes
Josef Müller ist offline   Mit Zitat antworten
Alt 22-02-2004, 15:18   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Ort: Köln
Beiträge: 106
Hallo Josef,

um das Scriptergebnis zu maskieren, musst Du es noch in einen weiteren Clip verschachteln. Dann kannst Du mit dem Befehl "movieClip.setMask(maskenClip);" einen Clip ausmaskieren. Beispiel: www.khm.de/~leif/klimbim/glowchain_masked.swf.

Wenn Du auf der Bühne einen Clip mit dem Instanznamen "myMask" anlegst, braucht das Script nur minimale Modifizierung:

ActionScript:
  1. /*** PREFS ***/
  2. _quality = "low";
  3. screenwidth = screenheight = 600;
  4. speed = 0.2;
  5. tailSegs = 60;
  6. containerLayer = 1;
  7.  
  8. /*** INIT ***/
  9. screenwidth_half = screenwidth/2;
  10. screenheight_half = screenheight/2;
  11.  
  12. /*** FUNCTIONS ***/
  13. startPoint = function () {
  14.     createEmptyMovieClip("myContainer", containerLayer);
  15.     var p = myContainer.attachMovie ("point", "point0", 1);
  16.     p.mamacount = 0;
  17.     p.x_before = p._x = Math.sin (0)*screenwidth_half+screenwidth_half;
  18.     p.y_before = p._y = Math.cos (0)*screenheight_half+screenheight_half;
  19.     p.onEnterFrame = moveMe;
  20.     myContainer.setMask(myMask);
  21.    
  22. }
  23.  
  24. moveMe = function () {
  25.     this.mamacount+=speed;
  26.     this._x = Math.sin (this.mamacount/25)*screenwidth_half+screenwidth_half;
  27.     this._y = Math.cos (this.mamacount/9)*screenheight_half+screenheight_half;
  28.     this.x_before = this._x;
  29.     this.y_before = this._y;
  30. }
  31.  
  32. dragMe = function () {
  33.     this.x_before = this._x+random(6)-3;
  34.     this.y_before = this._y+random(6)-3;;
  35. }
  36.  
  37. startTail = function () {
  38.     var i = tailSegs; while (--i>0) {
  39.         var tmpClip = myContainer.attachMovie ("point", "point" add i, 10+tailSegs-i);
  40.         tmpClip.id = i;
  41.         tmpClip._alpha = 100-100/tailSegs*i;
  42.         tmpClip._x= tmpClip._x_before = myContainer.point0._x
  43.         tmpClip._y= tmpClip._y_before = myContainer.point0._y
  44.         tmpClip.onEnterFrame = followPoint;
  45.     }
  46. }
  47.  
  48. followPoint = function () {
  49.     this.x_before = this._x;
  50.     this.y_before = this._y;
  51.     var parentClip = myContainer["point" add (this.id-1)];
  52.     this._x= parentClip.x_before;
  53.     this._y= parentClip.y_before;
  54. }
  55.  
  56. mouseInput = {};
  57. mouseInput.onMouseDown = function () {
  58.     myContainer.point0.startDrag(true);
  59.     myContainer.point0.onEnterFrame = dragMe;
  60. }
  61. mouseInput.onMouseUp = function () {
  62.     myContainer.point0.stopDrag();
  63.     myContainer.point0.onEnterFrame = moveMe;
  64. }
  65.  
  66. /*** PROGRAM ***/
  67. Mouse.addListener(mouseInput);
  68. startPoint();
  69. startTail();
  70. stop();

PS: Den Studiengang kann ich soweit auch nur empfehlen... dafür find ich Deinen Ansatz mit dem Oszillator sehr interessant! :-)
__________________
http://www.rumbke.de
leif ist offline   Mit Zitat antworten
Alt 02-03-2004, 18:51   #12 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Beiträge: 5
Hallo Leif,

der Schweif ist hinter der Maske!!! :-))

Aber eine letzte Frage habe ich noch...
Welche Farbe bzw. Farbnummer verwendest du bei dem MovieClip in dem Script oben?

Die Sprünge bei den Schwingungsformen Saw und Pulse krieg ich doch nicht weg, jedenfalls nicht mit dem bisherigen ActionScript-Ansatz. Die Sprünge werde zuerst einmal so lassen...
Wenn ich noch einige Kleinigkeiten geändert habe, uploade ich die (vorläufig letzte) Version.

PS:
>Den Studiengang kann ich soweit auch nur empfehlen
Leider bin ich (zumindest künstlerisch) kein besonders kreativer Mensch :-(
__________________
Joffes
Josef Müller ist offline   Mit Zitat antworten
Alt 07-05-2005, 14:48   #13 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 22
Hallo Leif!

Schöner Effekt!
Auch auf die Gefahr hin, mich nun als Vollblut-Anfänger zu outen, hab ich da doch mal eine Frage: Wo muss man das Script denn einsetzen, damit das funktioniert? Ich hab die beiden Symbole erstellt (point0 und point) und das Skript auf einer eigenen Ebene in den ersten Frame der Szene gelegt, sowie point0 in eine Ebene gesetzt, aber da passiert leider gar nichts, wenn ich den Film teste. Ich hab auch noch ein paar andere Varianten ausprobiert ohne Ergebnis (abgesehen von einigen Fehlermeldungen...)

Könntest Du evtl. die .fla-Datei hier posten, das wär super!

Vielen Dank und schönen Gruß!
bobweb ist offline   Mit Zitat antworten
Alt 08-05-2005, 08:45   #14 (permalink)
lernwillig
 
Benutzerbild von 23012
 
Registriert seit: Jan 2002
Ort: auf dem Land
Beiträge: 1.327
Hallo @ bobweb,
falls Leif dies nicht liest, ein Tip von mir. Den MC point erstellen,
dannin der Bibliothek mit der rechten Maustaste draufklicken
und unter Eigenschaften > Export für Actionscript anhaken,
dort auch den Bezeichner "point" geben, dann sollte es klappen.
Gruss
23012
__________________
[TUTORIAL] Nahtlose Muster erstellen in Photoshop
23012 ist offline   Mit Zitat antworten
Alt 08-05-2005, 10:27   #15 (permalink)
Neuer User
 
Registriert seit: May 2005
Beiträge: 22
Danke, nun funktioniert es! Im Rechtsklickmenü steht ja dann auch das mit der Verknüpfung... Tja, ich hab da wohl doch noch ein paar grundlegende Sachen zu lernen...
bobweb 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 05:14 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele