Einzelbildanimation "3D Rotation" onMouseUp abbremsen?

FL_avio

Grünschnabel
Hallo zusammen!

Folgendes Problem:
Ich habe eine Einzelbildanimation bestehend aus 100 Bildern.
Diese ergeben zusammen eine 360Grad rotation einer Szene.
Das ganze liegt in einem Movieclip „photos“ auf der Hauptzeitleiste. Zudem habe ich auf der Hauptzeitleiste im Schlüsselbild „action“ ein Script, mit dem sich der film bzw. die Rotation über gleichzeitiges drücken und ziehen der linken Maustaste nach links und rechts steuern/rotieren lässt. Bis hierhin funktioniert das ganze einwandfrei.
Nun möchte ich, das beim loslassen der Maustaste, die Rotation langsam abgebremst via z.B. „Friction“ und nicht abrupt stehen bleibt!
Wie lässt sich das ganze realisieren?
Ich würde mich sehr über Hilfe freuen

Anbei noch das für den Movieclip verwendete Script:


photos.stop();

var startX:Number;
var startFrame:Number;
var changeDistance:Number;
var travelDistance:Number;

photos.onPress = pressHandler;
photos.onRelease = releaseHandler;
photos.onReleaseOutside = releaseHandler;

function pressHandler():Void {
startX = photos._xmouse;
startFrame = photos._currentframe;
this.onMouseMove = moveHandler;
}

function releaseHandler():Void {
this.onMouseMove = null;
}

function moveHandler():Void {
changeDistance = Math.round((photos._xmouse - startX) / 10);
travelDistance = startFrame + changeDistance;
if (travelDistance > photos._totalframes) {
photos.gotoAndStop(travelDistance % photos._totalframes);
} else if (travelDistance < 0) {
photos.gotoAndStop(photos._totalframes + (travelDistance % photos._totalframes));
} else {
photos.gotoAndStop(travelDistance);
}
}
 
Hallo und willkommen!

Da du mit Frames arbeitest, ist ein Abbremsen der Animation ziemlich tricky. Hier findest du zwei Prototypes, mit denen man Eigenschaftänderungen mit fadeOut realisieren kann. In deinem Fall müsstest du das über eine Zwischenvariable lösen. Als Beispiel:
Erstelle eine Variable "targetFrame". Jedesmal wenn du nun eine Modifikation des Playheads vornimmst, tust du das nicht durch eine direkte gotoAndStop-Anweisung sondern durch den Aufruf
Code:
this.setTo(.5, 0, "targetFrame", [Zielframe])
.

Gleichzeitig weisst du per onEnterFrame die Variable targetFrame der Zeitleiste zu:
Code:
onEnterFrame = function () {
   photos.gotoAndStop(Math.round(targetFrame));
}

Das mal so als Denkansatz.

Gruss
 
Hallo Luke,
erstmal vielen Dank für die schnelle Antwort!
Könntest du mir das ganze vielleicht noch mal wie für einen Flash-
anfänger erklären?:-(
Beste Grüße
 
Hallo,

dann muss ich davon ausgehen, dass das Skript, das du gepostet hast, nicht von dir stammt, weil das doch schon fortschrittlicheres Coding erfordert. Wenn du dann noch Abbrems-Effekte auf der Zeitleiste implementieren willst, wäre es doch eigentlich naheliegend, sich mal ein bisschen durch die Referenz zu lesen, dann wärst du relativ schnell imstande, solche Effekte selbst zu realisieren...
Ein bisschen Symprombekämpfung noch:
1. Du platzierst den Codeblock der mit MovieClip.prototype.setTo beginnt in deinem Skript.

2. Du deklarierst eine Variable "targetFrame":
Code:
var targetFrame: Number = 1;

3. Du erstellst eine onEnterFrame-Schlaufe nach obigem Muster (Code kopieren und einfügen)

4. Nun ersetzt du jedes Vorkommen der Anweisung photos.gotoAndStop ([ZielFrame]) durch folgendes:
Code:
this.setTo(.5, 0, "targetFrame", travelDistance % photos._totalframes);

Gruss
 

Neue Beiträge

Zurück