Anzeige
Tutorialbeschreibung

Mausverfolger

Mausverfolger

Version: ab Flash MX

Niveau: Einsteiger bis Fortgeschrittene

Vorkenntnisse: Flash (Symbole, Zeitleisten), Grundlagen Actionscript (Arrays, Schleifen)

Lernziele: einfache Effekte skripten lernen; weitere einfache Codeoptimierungen kennen lernen; die setInterval-Methode kennen lernen; Mäuse verfolgen lernen?

Der Mausverfolger ist ein netter kleiner Effekt, der einer Seite eine ganz persönliche Note zu verleihen mag und zudem einfach zu skripten ist. Wir wollen eine beliebige Anzahl an Objekten zur Laufzeit auf der Bühne einblenden. Das erste Objekt folgt dem Mauszeiger, das zweite dem ersten, das dritte dem zweiten usw. Die Objekte können ihrerseits ebenfalls Animationen enthalten oder es kann sich um einen Text handeln – der dann allerdings etwas mühsam zu entziffern ist, da die Objekte erst stehen bleiben, wenn auch die Maus steht. In dem Fall jedoch überdecken sie sich gegenseitig, wie wir nachher noch sehen werden.

  1. Erstellen Sie einen neuen Film (1024x768, schwarz, 25 Bps).
  2. Benennen Sie „Ebene 1“ der Hauptzeitleiste um in „actions“.
  3. Erstellen Sie eine neue Ebene namens „temp“.
  4. Auf dieser Ebene erstellen Sie einen Kreis (Füllung rot, Rahmen schwarz – doch, doch, den wird man nachher unter bestimmten Umständen auch sehen können, 20x20).
  5. Wandeln Sie ihn in einen MovieClip um (Bibliotheks- und Exportname „mc_kreis“, Registrierungspunkt mittig).

Aus Gründen der Vereinfachung wollen wir zunächst auf dieser Ebene unsere Objekte animieren, bevor wir sie später dynamisch per Actionscript einfügen.

  1. Duplizieren Sie den Kreis auf der Bühne viermal, indem Sie ihn mit der Maus markieren und bei gedrückter Alt-Taste ziehen.
  2. Weisen Sie den Kreisen die Instanznamen „kreis1“ bis „kreis5“ zu.

Ihr Film müßte jetzt so aussehen:

Bilder

Im Grunde genommen können wir jetzt jedem Movieclip die Anweisung geben, seinem Vorgänger zu folgen. Die einzige Ausnahme stellt der erste Moveclip dar, der der Maus folgen soll. Dazu müssen wir festlegen, um wieviel Pixel sich jedes Objekt pro enterFrame (oder pro beliebiger Zeiteinheit) bewegen soll.

  1. Fügen Sie folgendes Skript in Frame 1 der Ebene „actions“ ein:

tempo = 5;
kreis1.onEnterFrame = function(){
          this._x += (_root._xmouse-this._x)/tempo;
          this._y += (_root._ymouse-this._y)/tempo;
}

Wenn Sie testen, wird sich kreis1 als äußerst treuer Weggefährte der Maus entpuppen.

In jedem enterFrame wird zunächst der Abstand zwischen der x-Position des Kreises und der x-Position der Maus ermittelt. Wenn beispielsweise die Maus sich bei x = 100 und der Kreis bei x = 70 befindet, beträgt der horizontale Abstand 30 Pixel. Dieser Weg ist also zu überwinden, damit der Kreis die Maus erreichen kann. Um ihn nicht direkt auf diesen Wert zu setzen, dividieren wir den Abstand durch eine beliebige, vorher festgelegte Zahl. In unserem Beispiel handelt es sich um 5, also den Wert der tempo-Variablen. Damit wird beim ersten enterFrame zur aktuellen Position des Kreises 30/5 = 6 hinzu addiert, der Abstand zur Maus reduziert sich also um 6 Pixel (vorausgesetzt, sie wird in der Zwischenzeit nicht bewegt). Befindet sich die Maus dagegen links vom Kreis, ergibt die Berechnung einen negativen Wert. Wird eine negative Zahl addiert, wie es in der dritten Codezeile steht, erfolgt faktisch eine Subtraktion (+- ergibt -). Da derselbe Prozeß auch mit der y-Position durchgeführt wird, bewegt sich der Kreis immer Richtung Maus.

Bilder

Damit auch explizit die Mausposition in der Hauptzeitleiste, nicht jedoch diejenige in irgendeinem Objekt verwendet wird (Sie erinnern sich: jedes Symbol verfügt über ein eigenes Koordinatensystem) greifen wir auf _root._xmouse zu. Allerdings handelt es sich dabei um eine absolute Pfadangabe, die in dem Augenblick Probleme bereitet, in dem wir mit der loadMovie-Methode arbeiten. Wenn dieser Film mit loadMovie in einen anderen geladen wird, verweist _root auf dessen Zeitleiste, und nicht mehr auf die Zeitleiste, in dem der Code steht. Um das Problem zu umgehen, sollten wir eine relative Angabe verwenden.

  1. Ersetzen Sie im Skript _root durch this._parent (Fettdruck):

tempo = 5;
kreis1.onEnterFrame = function(){
          this._x += (this._parent._xmouse-this._x)/tempo;
          this._y += (this._parent._ymouse-this._y)/tempo;
}

Bei der Ausführung ergibt sich rein optisch zwar kein Unerschied, aber jetzt funktioniert es auch dann problemlos, wenn dieser Film Teil einer mit loadMovie modular aufgebauten Webseite ist.

Auf ähnliche Weise können auch die übrigen Kreise bewegt werden.

  1. Kopieren Sie das vollständige enterFrame-Ereignis und fügen es viermal ein.
  2. Ändern Sie jeweils die Namen der betreffenden MovieClips, die das Ereignis erhalten, und fügen Sie als Zielposition für die Bewegung jeweils die x- und y-Koordination des vohergehenden MovieClips ein, so daß sich folgende Ergänzungen ergeben:

kreis2.onEnterFrame = function(){
          this._x += (kreis1._x-this._x)/tempo;
          this._y += (kreis1._y-this._y)/tempo;
}
kreis3.onEnterFrame = function(){
          this._x += (kreis2._x-this._x)/tempo;
          this._y += (kreis2._y-this._y)/tempo;
}
kreis4.onEnterFrame = function(){
          this._x += (kreis3._x-this._x)/tempo;
          this._y += (kreis3._y-this._y)/tempo;
}
kreis5.onEnterFrame = function(){
          this._x += (kreis4._x-this._x)/tempo;
          this._y += (kreis4._y-this._y)/tempo;
}

Beim Testen zieht die Maus jetzt eine Reihe an MovieClips hinter sich her. Der Bewegungsablauf entspricht demjenigen des ersten MovieClips mit dem einzigen Unterschied, daß als Ziel jeweils ein anderer MovieClip anstelle der Maus verwendet wird.

Übrigens: wenn Sie genau acht geben, kann es sein, daß sich ihre Objekte nicht richtig übereinander legen, sobald sie sich in der Nähe der Maus befinden:

Bilder

Das hängt mit der Reihenfolge zusammen, in der die Objekte von uns auf der Bühne erzeugt wurden. Es ist hier jedoch unproblematisch, da wir später ohnehin alle Kreise dynamisch per Skripting einfügen und bereits dort die Korrektur vornehmen.

Etwas anderes dagegen stört sehr: wir führen fünfmal annähernd denselben Befehlsblock (in enterFrame) aus. Wollten wir auf diese Art beispielsweise 20 Objekte einblenden, würden uns bald die Finger vor lauter Tippen abfallen (zumindest wenn Sie wie in meinem Fall mit nur zwei Fingern tippen, wenn auch mit großer Zielsicherheit). Zudem ist das nicht nur unschön, sondern auch noch ausgesprochen fehleranfällig und schwer zu pflegen. Hier hilft uns eine Schleife weiter.

Wenn wir alle enterFrame-Ereignisse betrachten, fällt auf, das sie identisch sind mit Ausnahme der Instanznamen der Kreise sowie der Zielangaben:

Bilder

Wenn es gelingt, diese veränderlichen Elemente in Variablen zu packen, dann können wir anstelle der 5 enterFrames eine Schleife mit der gleichen Funktionalität erstellen. Um uns die Arbeit etwas zu erleichtern, wollen wir alle Kreise in einem Array erfassen.

Außerdem weisen wir hier fünfmal ein enterFrame zu, was erheblich rechenintensiver ist als wenn wir nur ein enterFrame verwenden würden.

  1. Ersetzen Sie alle enterFrame-Ereignisse durch folgenden Code:

maxVerfolger = 5;
aVerfolger = [];
for (var i = 1; i<=maxVerfolger; i++) {
          aVerfolger.push(this["kreis"+i]);
}
this.onEnterFrame = function() {
          for (e in aVerfolger) {
                    if (e == 0) {
                              aVerfolger[e]._x += (this._xmouse-aVerfolger[e]._x)/tempo;
                              aVerfolger[e]._y += (this._ymouse-aVerfolger[e]._y)/tempo;
                    } else {
                              aVerfolger[e]._x += (aVerfolger[e-1]._x-aVerfolger[e]._x)/tempo;
                              aVerfolger[e]._y += (aVerfolger[e-1]._y-aVerfolger[e]._y)/tempo;
                    }
          }
};

Gegenüber der vorhergehenden Version ergibt der Test keinen visuell wahrnehmbaren Unterschied, aber die Programmierung ist erheblich flexibler (und professioneller, d.h. schwerer verständlich) geworden.

Zunächst legen wir in der Variablen maxVerfolger fest, wieviele Kreise für unseren Effekt verwendet werden sollen. Das anschließend eingerichtete Array aVerfolger wird mit Hilfe einer Schleife befüllt. Es enthält die Instanznamen aller Kreise, so daß Flash durch einen simplen Arrayzugriff weiß, wer bewegt werden muß. Es hat zudem den Vorteil, daß die Reihenfolge im Array der Reihenfolge entspricht, in der die Kreise sich auf der Bühne bewegen. Dabei legen wir einfach fest, daß das erste Arrayobjekt dasjenige ist, daß hinter der Maus herrennt. Ändert sich die Anzahl der Kreise über die Variable maxVerfolger, fügt die Schleife automatisch dementsprechend mehr Objekte in das Array ein.

Das enterFrame-Ereignis wird nicht mehr jedem einzelnen Kreis zugewiesen, sondern über das Schlüsselwort this direkt der Hauptzeitleiste. Damit haben wir statt fünf nur noch ein einziges enterFrame-Ereignis, sparen also Rechenprozesse ein. Die for-in-Schleife sorgt für die eigentliche Bewegung. Dabei muß sie zwei Fälle unterscheiden: Wenn der erste MovieClip an der Reihe ist, besteht das Ziel in der Mausposition. Der erste MovieClip liegt an erster Stelle innerhalb des Arrays, wird also in der Schleife dann gefunden, wenn e = 0 ist. Der zweite Fall liegt bei allen anderen MovieClips vor, die lediglich jeweils ihrem Vorgänger folgen sollen. Der Vorgänger liegt im Array links neben der aktuellen Position. Wenn also z.B. die Schleife bei e = 1 auf aVerfolger[e] zugreift, findet sie kreis2. Davor befindet sich kreis1, den man ausgehend von der aktuellen Arrayposition mit e-1, also aVerfolger[e-1] erhält.

Betrachten wir das enterFrame-Eereignis genauer, fällt auf, das noch eine Vereinfachung möglich ist. Denn in beiden Fällen wird eine Bewegung ausgeführt, die sich lediglich durch das Ziel unterscheidet. Hier macht es Sinn, eine parametrisierte Funktion zu verwenden.

  1. Ändern Sie das Skript wie folgt (Fettdruck):

this.onEnterFrame = function() {
          for (e in aVerfolger) {
                    if (e == 0) {
                              folgen(aVerfolger[e], this._xmouse, this._ymouse);
                    } else {
                              folgen(aVerfolger[e], aVerfolger[e-1]._x, aVerfolger[e-1]._y);
                    }
          }
};

Halt, nein – Mist, zu spät! Sie haben schon getestet und sind jetzt sicher enttäuscht, weil wir nun anscheinend alles kaputt gemacht haben: unsere Kreise zeigen nur noch eine sehr statische Animation, will heißen, es erfolgt keine Bewegung mehr. Das ist auch nicht weiter verwunderlich, denn wir rufen zwar eine Funktion namens folgen auf, haben diese aber nirgends definiert.

  1. Daher fügen Sie unmittelbar vor die Zuweisung des enterFrame-Ereignisses folgende Zeilen ein:

function folgen(wer, wemX, wemY) {
          wer._x += (wemX-wer._x)/tempo;
          wer._y += (wemY-wer._y)/tempo;
}

Jetzt dürfen Sie endlich testen, und es funktioniert wieder wie zuvor.

Innerhalb der Funktionsdefinition werden exakt dieselben Befehle ausgeführt wie vorher in der Schleife. Allerdings wurden alle Angaben, die variieren können (wer wird bewegt? wie lauten die Zielkoordinaten in x- und y-Richtung?), in die Parameter wer, wemX, wemY geschrieben. Beim Aufruf der Funktion erfolgt auch direkt die Übergabe der benötigten Werte.

Im Workshop zum Memoryspiel haben Sie gelernt (haben Sie doch, oder? Ansonsten flugs dort nachschauen!), daß man Elemente, die eine logische Einheit bilden, einem einzelnen Objekt zuweisen sollte. Damit läßt sich der Programmcode relativ leicht in andere Anwendungen übernehmen, und es ist einfach, notfalls alle nicht mehr benötigten Elemente zu löschen. Das bedeutet hier, daß wir alle Kreise einem übergeordneten MovieClip zuweisen. Wenn wir dann alle Kreise loswerden wollen, müssen wir nur den übergeordnete Clip löschen. Außerdem wollen wir die Objekte zur Laufzeit einfügen, so daß das mühsame Duplizieren per Hand entfällt.

  1. Die for-Schleife, die das Array aVerfolger füllt, ersetzen Sie vollständig durch folgende Zeilen:

this.createEmptyMovieClip("maus", 1);
for (var i = maxVerfolger; i>0; i--) {
          maus.attachMovie("mc_kreis", "kreis"+i, i);
          aVerfolger.push(maus["kreis"+i]);
}

Damit sieht das vollständige Skript jetzt so aus:

Bilder

Zunächst erstellen wir einen leeren MovieClip namens maus, den wir als Behälter für alle Kreise einsetzen wollen. In diesen MovieClip wird so oft mc_kreis eingefügt, wie wir anfangs in der Variablen maxVerfolger festgelegt haben, also im konkreten Fall fünfmal. Um sicher zu stellen, daß der zuerst eingefügte Kreis nicht von den nachfolgenden verdeckt werden kann, muß ihm die größte Tiefe zugewiesen werden. Das erreichen wir, indem unsere Zählvariable mit dem höchstmöglichen Wert beginnt und dann auf 0 heruntergezählt wird; sie dient uns als Wert für die Tiefe. Für die konkrete Ausführung des Skriptes ist es unerheblich, daß im Gegensatz zu vorher unser erster MovieClip nun kreis5 und der letzte kreis1 heißt.

Die Geschwindigkeit, mit der sich die einzelnen Objekte bewegen, hängt von der tempo-Variablen ab. Verringern Sie den Wert beispielsweise auf 3, bewegen sich die Kreise erheblich schneller. Bei einem Wert von 10 dagegen imitiert ihre Geschwindigkeit das Wachstumstempo der deutschen Wirtschaft. Experimentieren Sie auch mit einer größere Anzahl an Kreisen. Diese läßt sich einfach erhöhen, indem Sie der Variablen maxVerfolger beispielsweise 15 zuweisen.

Wenn wir nun noch die Optimierung im Sinne einer Zuweisung aller logisch zusammengehörenden Objekten zu einem einzigen Objekt vervollständigen wollen, müssen alle benötigten Variablen und Funktionen dem Maus-MovieClip zugewiesen werden. In der ersten Zeile wird dann dieser leere MovieClip erstellt, und erst danach richten wir die zugehörigen Variablen und Funktionen ein.

  1. Das vollständige Skript sieht dementsprechend so aus:

this.createEmptyMovieClip("maus", 1);
maus.tempo = 5;
maus.maxVerfolger = 5;
maus.aVerfolger = [];
for (var i = maus.maxVerfolger; i>0; i--) {
          maus.attachMovie("mc_kreis", "kreis"+i, i);
          maus.aVerfolger.push(maus["kreis"+i]);
}
wer._x += (wemX-wer._x)/maus.tempo;
wer._y += (wemY-wer._y)/maus.tempo;
}
this.onEnterFrame = function() {
          for (e in maus.aVerfolger) {
                    if (e == 0) {
                              maus.folgen(maus.aVerfolger[e], this._xmouse, this._ymouse);
                    } else {
                              maus.folgen(maus.aVerfolger[e], maus.aVerfolger[e-1]._x, maus.aVerfolger[e-1]._y);
                    }
          }
};

Das enterFrame-Ereignis reicht für unsere Zwecke vollkommen aus, hat aber den Nachteil, daß es an die Fähigkeit des Zielrechners gebunden ist, exakt die von Ihnen vorgegebene Bildwiederholrate einzuhalten. Bei komplexen Projekten kann das problematisch sein. Alternativ kann man daher auf die setInterval-Funktion zurück greifen.

  1. Ändern Sie das enterFrame-Ereignis wie folgt (Fettdruck):

maus.verfolgung = function(main) {
          for (e in maus.aVerfolger) {
                    if (e == 0) {
                              maus.folgen(maus.aVerfolger[e], main._xmouse, main._ymouse);
                    } else {
                              maus.folgen(maus.aVerfolger[e], maus.aVerfolger[e-1]._x, maus.aVerfolger[e-1]._y);
                    }
          }
};
interv = setInterval(maus.verfolgung, 20, this);

Auch hier erkennen wir beim Testen keine Änderung. Programmiertechnisch ist aber nun die Animation von der Bildwiederholrate entkoppelt und richtet sich ausschließlich nach der Systemuhr des Rechners, auf dem das Skript ausgeführt wird. Auf jedem Rechner wird es daher gleich schnell laufen, auch auf schwächeren.

Der Variablen interv wird ein Interval zugewiesen, d.h., es wird alle 20 Millisekunden die Funktion verfolgung aufgerufen und ihr als Parameter this übergeben. Da die setInterval-Methode in einer Variablen gespeichert wird, ist es möglich, sie, falls gewünscht, auch wieder zu löschen. Dazu muß lediglich clearInterval(interv) ausgeführt werden. Dann endet die Animation.

Die setInterval-Methode akzeptiert als Parameter an erster Stelle in der runden Klammer den Namen der Funktion, die periodisch ausgeführt werden soll. Dann folgt die Zeitdauer in Millisekeunden, nach der jedesmal der Aufruf erfolgt. Bei allen danach folgenden Angaben handelt es sich um Parameter, die an die hier aufgerufene Funktion verfolgung mit übergeben werden. Die setInterval-Methode funktioniert also wie eine Uhr, die regelmäßig eine bestimmte Aufgabe erfüllt. Darin gleicht sie dem enterFrame-Ereignis, das ebenfalls permanent ausgeführt wird. Allerdings kann setInterval über die Zeiteinstellung, also die Millisekundenangabe, recht präzise gesteuert werden, was so beim enterFrame nicht geht.

In einer Hinsicht benimmt sich setInterval leider suboptimal: die dort aufgerufene Funktion ist nicht in der Lage, das Schlüsselwort this korrekt zuzuordnen. Das können Sie selbst testen, indem Sie in die Funktionsdefinition von verfolgung noch vor die for-Schleife ein trace(this); einfügen. Als Ergebnis erhalten Sie im Nachrichtenfenster undefined. Da wir aber this für die Mausposition benötigen, müssen wir es in den setInterval-Aufruf als Parameter mit hineinpacken. In der Funktionsdefinition von verfolgung ist dann der Parameter main identisch mit this und bezieht sich auf die Hauptzeitleiste.

Ob Sie im vorliegenden Fall enterFrame oder setInterval den Vorzug geben, ist unerheblich. Sie sollten jedoch zumindest verstanden haben, wo und wie man setInterval einsetzen könnte.

Wenn Sie die Objekte verändern, ergeben sich interessante Effekte. Wie wäre es z.B. mit glitzerndem Feenstaub, der der Maus in Form eines Zauberstabs folgt? Jedes Glitzersternchen kann eine eigene Animation enthalten (z.B. Ein- und Ausfaden oder leichte, zufällig gewählte Positonsänderungen, oder jeder nachfolgende Stern hat eine leicht veränderte Farbe etc.). Nur Ihre Phantasie setzt hier Grenzen.

Ein anderes Beispiel wollen wir uns noch gemeinsam erarbeiten: ganz am Anfang des Workshops wurde die Möglichkeit erwähnt, auf diese Weise auch Texte einzublenden.

Der MovieClip mc_kreis muß dazu geändert werden.

  1. Öffnen Sie im Symbolbearbeitungsmodus den MovieClip mc-Kreis und ersetzen Sie die Grafik durch ein dynamisches Textfeld (Instanzname „txt“, Verdana, bold, 16, weiß, einzeilig, nicht auswählbar, Textausrichtung zentriert, Registrierungspunkt mittig).
  2. Schließen Sie den Symbolbearbeitungsmodus und kehren zurück zur Hauptzeitleiste, um das Skript zu ändern.

Der benötigte Programmcode lautet (Änderungen in Fettdruck):

this.createEmptyMovieClip("maus", 1);
maus.anzeige = "Hallo Flasher!";
maus.maxVerfolger = maus.anzeige.length;
maus.tiefe = maus.maxVerfolger;
maus.tempo = 5;
maus.aVerfolger = [];
for (var i = 1; i<=maus.maxVerfolger; i++) {
          maus.attachMovie("mc_kreis", "kreis"+i, maus.tiefe);
          maus.aVerfolger.push(maus["kreis"+i]);
          maus["kreis"+i].txt.text = maus.anzeige.substring(i-1, i);
          maus.tiefe--;
}
maus.folgen = function(wer, wemX, wemY) {
          wer._x -= (wer._x-wemX)/maus.tempo;
          wer._y -= (wer._y-wemY)/maus.tempo;
};
maus.verfolgung = function(main) {
          for (e in maus.aVerfolger) {
                    if (e == 0) {
                              maus.folgen(maus.aVerfolger[e], main._xmouse, main._ymouse);
                    } else {
                              maus.folgen(maus.aVerfolger[e], maus.aVerfolger[e-1]._x, maus.aVerfolger[e-1]._y);
                    }
          }
};
interv = setInterval(maus.verfolgung, 20, this);

Beim Testen wird die arme Maus hoffentlich von einer Horde wilder Buchstaben gehetzt.

Die Variable anzeige wird verwendet, um den Text, der auf der Bühne erscheint, aufzunehmen. Die Anzahl der einzublendenden Objekte ergibt sich automatisch aus der Gesamtlänge des Textes, wobei auch die Lehrzeichen mitgezählt werden müssen (was zum Glück über die Eigenschaft length automatisch erfolgt).

Wie bei den Kreisen muß auch hier der erste Buchstabe vor allen anderen liegen. Allerdings ist es jetzt notwendig, als erstes Objekt auch tatsächlich den ersten Buchstaben einzublenden, während wir bei den Kreisen problemlos zuerst den letzten Kreis anzeigen konnten. Eine Lösung besteht darin, in einer Variablen die Gesamtanzahl der einzublendenden Objekte festzuhalten. Das geschieht mit Hilfe von tiefe. Sie wird dann verwendet, um dem ersten Buchstaben die größte Tiefe zu geben, und bei jedem weiteren Schleifendurchlauf inkrementieren wir sie, so daß sie am Ende 1 enthält. Das letzte Zeichen erhält dann die Tiefe 1 und liegt damit hinter allen anderen Zeichen.

Damit ist es uns möglich, die Schleife zum Einblenden der Objekte wie normalerweise üblich von 1 beginnend zu inkrementieren anstatt wie im Fall unserer Kreise zu dekrementieren. Beim ersten Schleifendurchlauf wird also das Objekt kreis1 mit dem Buchstaben „H“ auf der Tiefe 14 eingeblendet, dann folgt kreis2 mit „a“ auf Tiefe 13 usw.

Da wir verschiedene Varianten ausprobiert haben, wird diesmal auf eine Wiederholung des fertigen Programmcodes verzichtet.

Viel Spass beim Ausprobieren.


DVD-Werbung
Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von samtron
  • 15.12.2011 - 22:08

sehr schön und vielen Dank :-) ;.)

MfG
Samtron

Portrait von TaraRockstar
  • 05.05.2011 - 12:19

ich such sowas mit linien das Wellen entstehen und so....

Portrait von braindamage
  • 07.04.2009 - 15:07

ist zwar gut, aber bisschen schwierig...

Portrait von sticki
  • 25.10.2007 - 18:22

Leider bei 16. der Quellcode nich richtig. Ab da an auch für Anfänger schwierig zu verstehn.

Portrait von h_seldon
  • 29.10.2007 - 14:22

Hallo,<br>
<br>
ja, in Schritt 16 ist die schließende Klammer } unmittelbar vor this.onEnterFrame zuviel, sorry :(<br>
<br><br>
Aber im abschließenden Code stimmt alles (hm, ist wohl eher ein schwacher Trost, oder?).<br>
<br><br>
Der Schwierigkeitsgrad ist natürlich immer ein bißchen schwer einzuschätzen. Was für den Einen zu leicht ist, kommt dem Anderen schon arg schwer vor. Aber ich hoffe, wenn man es vielleicht ein zweites mal liest, versteht man die Passagen, die einem vorher Spanisch vorkamen, schon besser.<br>
<br><br>
Viel Spass

Portrait von oe11er
  • 13.12.2006 - 13:28

na bei den ersten beiden versionen kam ich noch mit,bei allen was danach kam klappte so praktisch nix mehr.
trotzdem sehr ausfuehrliches tut,ich halt mich hier dranne schon 2 tage auf und werde bestimmt nochmal reinkucken

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 15.08.2006 - 12:21

Das habe ich immer gesucht und nicht gefunden. Aber dank diesem tollen Workshop weis ich jetz wie es geht. DANKE!!!

Portrait von frantic
  • 29.05.2006 - 15:14

Irgenwie will es net funtzten *heul*!

Portrait von Raversound20
Portrait von salo76
  • 05.01.2006 - 23:09

servus <br>
<br>
würde gern das tut. weitermachen..aber bei mir kommt schon nach der ersten skript eingabe so wie du´s beschrieben hast diese fehlermeldung:<br>
<br>
**Fehler** Szene=Szene 1, Ebene=actions, Bild=1:Zeile 3: Auf Operator '=' muss ein Operand folgen<br>
          this._x += (this._parent._xmouse-this._x)/tempo;<br>
<br>
**Fehler** Szene=Szene 1, Ebene=actions, Bild=1:Zeile 4: Syntaxfehler.<br>
          this._y += (this._parent._ymouse-this._y)/tempo;<br>
<br>
Anzahl der ActionScript-Fehler: 2 Gemeldete Fehler: 2<br>
<br>
<br>
und ich weis nicht wo der fehler liegt.....<br>
<br>
schöne grüsse

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 03.12.2005 - 21:07

ich schnall wieder nix *nochmal les*

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 03.11.2005 - 17:56

Wie macht man ein Movie Clip?? hab leider die englische version

Portrait von h_seldon
  • 04.11.2005 - 07:43

Hallo ff985,<br>
<br>
wenn Du ein Objekt auf der Bühne gezeichnet hast, dann markiere es, indem Du mit der Maus einen Rahmen um das Objekt aufziehst, drücke die Taste F8 und trage die gewünschten Eigenschaften (zumindest den Bibliotheksnamen) ein - fertig! Den Rahmen kannst Du aufziehen, wenn das Auswahlwerkzeug (schwarz gefüllter Cursor als Mauszeiger) aktiviert ist.<br>
<br>
Viel Spass

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 24.10.2005 - 18:05

Wieder total gut erklärt und sehr ausführlich. Weiter so.

x
×
×