Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-08-2004, 13:51   #1 (permalink)
Flashtestdummy
 
Benutzerbild von Alex_R
 
Registriert seit: Mar 2003
Beiträge: 153
Lightbulb Tween mit AS? easiing?

moin,

mich würde mal interessieren, wie es funktioniert, mit AS ein objekt von Punkt "x" nach punkt "a" zu bewegen. vorallem, wenn punkt "x" unbekannt ist, weil dynamisch. die "ganz normale" bewegung ist mir schon geläufig, aber wie kann ich dieser animation einen, vom motion tween bekannten, easiing (abbrems, bzw. beschleunigungs) effekt geben? das ist wohl hohe mathematik und da blick ich nicht durch. wär voll cool, wenn einer von euch das eventuell schonmal gemacht hat und mir die formel dafür geben könnte.

vielen dank schonmal
Alex_R ist offline   Mit Zitat antworten
Alt 29-08-2004, 14:02   #2 (permalink)
aka stauby
 
Benutzerbild von webdust
 
Registriert seit: Mar 2004
Ort: Würzburg
Beiträge: 705
ActionScript:
  1. mc.onEnterFrame = function() {
  2.  mc._x += (mc._x-ziel_x)/bremsfaktor;
  3.  mc._y += (mc._y-ziel_y)/bremsfaktor;
  4. }

Wobei du hier ganz einfach die Parameter für den x- und y-Wert des Ziels, sowie den Bremsfaktor wählen kannst.
__________________
"The things you own end up owning you."
webdust ist offline   Mit Zitat antworten
Alt 30-08-2004, 00:04   #3 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Über das Thema findet man ganze Kapitel in Robert Penners "Progamming Macromedia Flash MX". Beispiele findet man auch unter www.robertpenner.com unter "easing equations".
  Mit Zitat antworten
Alt 30-08-2004, 07:05   #4 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
flash mx 2004 stellt da auch schon 2 tweenklassen mit easing-funktionen zur verfügung:
ActionScript:
  1. import mx.effects.*;
  2. import mx.transitions.easing.*;
  3. mc.onTweenUpdate = function (value)
  4. {
  5.     this._x = value;
  6. };
  7. tween = new Tween (mc, 0, 500, 1500);
  8. tween.easingEquation = Strong.easeOut;
  9.  
  10. //oder mal mit z.b.
  11. //tween.easingEquation = Bounce.easeOut;
  12. //tween.easingEquation = Back.easeOut;
  13. //tween.easingEquation = Elastic.easeInOut;
  14. //versuchen
  15. //
  16.  
wahlweise das animation-package von Alex Uhlmann (OOP-bereich) benutzen, ist etwas konfortabler
michael ist offline   Mit Zitat antworten
Alt 30-08-2004, 11:02   #5 (permalink)
Flashtestdummy
 
Benutzerbild von Alex_R
 
Registriert seit: Mar 2003
Beiträge: 153
vielen dank schonmal für die hilfe.

ich habe versucht es anzuwenden, bin aber nicht wirklich zu einem ergebnis gekommen, kann ich ein script nicht so schreiben:

if (_root.jahreszahlAusgabe == 1911) {
mc.onEnterFrame = function() {
this._x += (this._x-500)/100;
};
}

ich habe es direkt auf den betreffenden MC gelegt.

vielleicht sollte ich dazusagen, das dieser MC verschachtelt ist und nicht der container sich bewegen soll, sondern nur der betreffende MC innerhalb des containers. also steuere ich quasi den MC _root.container.mc1 damit an.
Alex_R ist offline   Mit Zitat antworten
Alt 30-08-2004, 11:09   #6 (permalink)
Flashtestdummy
 
Benutzerbild von Alex_R
 
Registriert seit: Mar 2003
Beiträge: 153
moment!!! alles nochmal zurück. ich habe gerade doch noch geschafft, das sich der mc1 bewegt allerdings bewegt er sich willkürlich (zumindest kommt es mir so vor). script:

if (_root.jahreszahlAusgabe == 1911) {
setProperty(_root.container.mc1, _x, _root.container.mc1._x += (_root.container.mc1._x-0)/50);
}

kann es an der verschachtelung liegen? geht der ziel wert von der _root ebene aus oder dem _x wert innerhalb des container mcs?

also um meine frage zu verdeutlichen: wie kann ich dem ding den genau sagen wo es hinsoll, also auf welche _x koordinate? und halt wie sag ich ihm das er dann da auch stehen bleiben soll.

Geändert von Alex_R (30-08-2004 um 11:19 Uhr)
Alex_R ist offline   Mit Zitat antworten
Alt 30-08-2004, 12:51   #7 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Du kannst die Werte doch im Testmodus testen. Gib einfach mal in deine Schleife ein paar traces ein, die dir dann die Werte zurückgeben, z.B.
ActionScript:
  1. if (_root.jahreszahlAusgabe == 1911) {
  2.    _root.container.mc1._x += (_root.container.mc1._x/50);
  3.    trace("_root.container.mc1._x="+_root.container.mc1._x);
  4. }
Die setPropertys solltest du total vergessen, das ist ja noch Flash 4. Die Dot-Syntax ist viel übersichtlicher. Warum hast du im letzten Script den onEnterFrame weggelassen, der erzeugt doch die kontinuierliche Bewegung.?
  Mit Zitat antworten
Alt 30-08-2004, 14:38   #8 (permalink)
Flashtestdummy
 
Benutzerbild von Alex_R
 
Registriert seit: Mar 2003
Beiträge: 153
setProperty habe ich auch schon rausgeschmissen.

den onEnterFrame habe ich weggelassen, weil das "bewegungs-script" nicht mehr auf dem objekt sondern oben im frame der timeline liegt.

muss ich den bei einem onEnterFrame keine pseudo schleife mit zwei frames machen?

zu dem script, wo bleibt mein objekt den jetzt stehen? bei 50? und was ist wenn mein objekt nicht kleiner sondern grösser ist, dann müsste ich doch runterzählen. ich habe auch schonmal weitergebastelt und bin jetzt hier:

//mc für versch. jahreszahlen definieren
if (_root.jahreszahlAusgabe == 1911) {
i = 1;
}
if (_root.jahreszahlAusgabe == 1912) {
i = 2;
}
//mc verschieben
if (_root.jahreszahlAusgabe>0) {
if (_root.die_MCs["mc"+i]._x>99) {
_root.die_MCs["mc"+i]._x -= _root.die_MCs["mc"+i]._x/20;
} else if (_root.die_MCs["mc"+i]._x<101) {
_root.die_MCs["mc"+i]._x += _root.die_MCs["mc"+i]._x/20;
}
}


mein prblem hierbei ist nur, das der mc beginnt zu zittern, sobald er in die nähe von 100 kommt. da ja dann beides, permanent zutrifft. sowohl "if" als auch "else if". nur wenn ich direkt auf 100 prüfen, springt mir der mc meist an der 100 vorbei und schiesst dann entweder nach links oder rechts aus dem bild.

=) strange
Alex_R ist offline   Mit Zitat antworten
Alt 31-08-2004, 09:35   #9 (permalink)
Flashtestdummy
 
Benutzerbild von Alex_R
 
Registriert seit: Mar 2003
Beiträge: 153
da bin ich nochmal.

diesmal würde mich interessieren, wer von euch schonmal ne beschleunigung mit einer sinuskurve berechtnet hat. einer berechnugn dieser art sollte es möglich machen, das man den MC auch wieder schön abbremst.

ich muss ehrlich zugeben, das ist mir viel zu hohe mathematik. sowas habe ich noch nie verstanden. (auch nicht letzte nacht, als ich die ganze zeit drüber saß)

ich hoffe jetzt, das einer von euch sowas schonmal gemacht hat und mir vielleicht die formel zur verfügung stellt. wäre echt super cool.

vielen dank schonmal
Alex_R ist offline   Mit Zitat antworten
Alt 31-08-2004, 10:24   #10 (permalink)
aka stauby
 
Benutzerbild von webdust
 
Registriert seit: Mar 2004
Ort: Würzburg
Beiträge: 705
Zwar noch nicht selbst gemacht, aber eindimensional ist das ganze ja mathematisch nicht so aufwendig. Ich gehe mal davon aus, du meinst nur das erste Viertel einer Sinus-Periode? Das hieße dann, dass der zurückgelegte Wert im Endeffekt der Amplitude entsprechen würde, und die Funktion nur ausgeführt werdne soll, wenn das Argument <= als Pi/2 ist. Hmm... und ich glaube, in Dimensionen ist da auch kein großer Unterschied.

Dann sollte doch diese Formel in etwa den Zweck erfüllen:

ActionScript:
  1. w = ... // Die Winkelgeschwindigkeit
  2. t = 0; // so zu sagen das differntielle Zeitelement
  3. start_x = ...
  4. ziel_x = ...
  5. start_x = ...
  6. ziel_x = ...
  7.  
  8. this.onEnterFrame  = function() {
  9.   if(w*t <= Math.PI/2) {
  10.      mc._x = start_x + (ziel_x-start_x)*Math.sin(w*t);
  11.      mc._y = start_y + (ziel_y-start_y)*Math.sin(w*t);
  12.      t++;
  13.    }
  14. }

(Nicht getestet, sondern eben aus dem Ärmel geschüttelt).
__________________
"The things you own end up owning you."
webdust ist offline   Mit Zitat antworten
Alt 31-08-2004, 10:29   #11 (permalink)
aka stauby
 
Benutzerbild von webdust
 
Registriert seit: Mar 2004
Ort: Würzburg
Beiträge: 705
Ach ja, nur Winkelgeschwindigkeit deutlich kleiner als 1.0 machen natürlich Sinn.
__________________
"The things you own end up owning you."
webdust ist offline   Mit Zitat antworten
Alt 03-09-2004, 09:25   #12 (permalink)
Flashtestdummy
 
Benutzerbild von Alex_R
 
Registriert seit: Mar 2003
Beiträge: 153
abgefahren, vielen dank. ich bin total begeistert!!! =)
Alex_R 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 07:34 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele