Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-08-2003, 12:20   #1 (permalink)
verdammt guter kaffee!!!
 
Benutzerbild von flashgordoncole
 
Registriert seit: Mar 2002
Ort: augsburg
Beiträge: 480
Mittelpunkt-Abstand und abbremsen

Hallo zusammen,

habe mir ein Skript aus dem Forum so umgebaut, das immer die Entfernung der Maus zum Ursprung eines MC berechnet wird.

Jetzt möchte ich die Mauskoordinaten oder den GotoFrame Befehl verzögert auswerten um die Bewegung des Movieclips weicher zu bekommen...

Hat da jemand einen Tip für mich?

THX

f-g-c

ActionScript:
  1. onClipEvent (load) {
  2. // Koordinaten MC
  3.     mcX = _x;
  4.     mcY = _y;
  5.     frames = _totalframes;
  6. }
  7. onClipEvent (mouseMove) {
  8.     distX = mcX-_root._xmouse;
  9.     // Positivierung der Mauskoordinaten
  10.     if (distX<0) {
  11.         distX = -1*distX;
  12.     }
  13.     distY = mcY-_root._ymouse;
  14.     if (distY<0) {
  15.         distY=-1*distY;
  16.     }
  17.     distAll = (Math.sqrt((Math.pow(distX,2))+(Math.pow(distY,2))))*2;
  18.     if (distAll>=0 && distAll<=frames) {
  19.         gotoAndStop(Math.round(frames-distAll));
  20.     } else {
  21.         gotoAndStop(1);
  22.     }
  23.     trace("distAll "+distAll);
  24.     trace("distY "+distY);
  25.     trace("distX "+distX);
  26.     updateAfterEvent();
  27. }
flashgordoncole ist offline   Mit Zitat antworten
Alt 04-08-2003, 14:19   #2 (permalink)
]chl[
 
Benutzerbild von chlerub
 
Registriert seit: Oct 2001
Ort: Düsseldorf
Beiträge: 220
die wohl einfachste "easing" methode:

ActionScript:
  1. onClipEvent (load) {
  2.     _x = 0;
  3.     _y = 0;
  4.     speed = 8; // <--- je grösser je "easer"
  5. }
  6. onClipEvent (mouseMove) {
  7.     targetx = _root._xmouse;
  8.     targety = _root._ymouse;
  9. }
  10. onClipEvent (enterFrame) {
  11.     _x += (targetx-_x)/speed; // <---- easing formel
  12.     _y += (targety-_y)/speed;
  13. }

alter Flash5 snippet, also nicht meckern, kann man durchaus verwurschteln
chlerub ist offline   Mit Zitat antworten
Alt 04-08-2003, 15:50   #3 (permalink)
Steffen G.
 
Benutzerbild von Tschdaeff
 
Registriert seit: Aug 2001
Ort: Ba-Wü
Beiträge: 4.123
du willst aber schon das was chlerub dir gepostet hat weil ich fände keinen sinn darin gotoAndStop zu nehmen also ne animation zu machen

cu mfg
Tschdaeff
__________________
mod@
www.flashbattle.de
www.steffen-guse.de
------------------------------------

Tschdaeff ist offline   Mit Zitat antworten
Alt 04-08-2003, 15:57   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
zielframe abspeichern (zielframe =Math.round(frames-distAll) )
aktuelles frame in variable ablegen(cframe=_currentframe)
und mit o.g. easing methode die frames annähern
also
ActionScript:
  1. zielframe=Math.round(frames-distAll)
  2. cframe=_currentframe
  3. //annäherung, 0 ist speedvariable, je höher desto softer/langsamer
  4. cframe+=(zielframe-cframe)/10
  5. distAll = (Math.sqrt((Math.pow(distX,2))+(Math.pow(distY,2))))*2;
  6.         if (distAll>=0 && distAll<=frames) {
  7.                 gotoAndStop(cframe)
  8.         } else {
  9.                 gotoAndStop(1);
  10.         }
  11. //...
  12.  

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 04-08-2003, 16:58   #5 (permalink)
verdammt guter kaffee!!!
 
Benutzerbild von flashgordoncole
 
Registriert seit: Mar 2002
Ort: augsburg
Beiträge: 480
Danke für eure Hilfe!

Das Verfahren von deluxe ist das was ich machen wollte. Ich hab mich aber zu sehr auf meine distAll- Variable versteift und mit dieser rumgespielt.

Dennoch will sich der gewünschte Effekt nicht einstellen. Und das liegt wohl an dem GotoAndStop in Kombination mit der Koordinatenabfrage bei Mousemove.

Der durch die distAll-Variable gesteuerte MC ruckelt und zuckelt, das es nur so blutet im Auge ;-)

Aber auch wenn ich die ganze Geschichte bei EnterFrame abrufe, ruckelts wie blöd. Hab auch nochmal an den FPS geschraubt, und mit der speedvariable gespielt: keine (wesentliche) Änderung.

Ohne die "ease"-Methode läuft der MC tadellos, nur eben viel zu schnell, wenn man die Maus schnell bewegt. Das war es was ich verhindern wollte.

Wenn vielleicht noch mal jemand nen Tip hat?

ratlos, f-g-c


fla angehängt...
Angehängte Dateien
Dateityp: zip mittelpunkt.zip (3,5 KB, 21x aufgerufen)
flashgordoncole ist offline   Mit Zitat antworten
Alt 05-08-2003, 09:54   #6 (permalink)
]chl[
 
Benutzerbild von chlerub
 
Registriert seit: Oct 2001
Ort: Düsseldorf
Beiträge: 220
Ich hab mit das file gesaugt, verstehe allerdings nicht was du überhaupt vor hast. Was genau soll denn da geschehen?
chlerub ist offline   Mit Zitat antworten
Alt 05-08-2003, 10:49   #7 (permalink)
verdammt guter kaffee!!!
 
Benutzerbild von flashgordoncole
 
Registriert seit: Mar 2002
Ort: augsburg
Beiträge: 480
hi chlerub,

es geht eigentlich nur darum: Die Mausbewegung soll den MC mit den Kreisen steuern> Je näher die Maus am Mittelpunkt, desto höher der Frame im MC.

Das Problem ist: Fährt der User schnell mit der Maus Richtung Mittelpunkt, läuft der MC genauso schnell ab. Hier wollte ich eine *Bremse* einbauen.

Ich hab keine Ahnung, wie man das anders lösen könnte, vielleicht ist auch der Ansatz über die Mauskoordinaten > Hypotenuse > Abstand zum MC-Ursprung schon falsch??

Das ganze soll mal eine *etwas andere* Navigation werden

greetz

f-g-c
flashgordoncole ist offline   Mit Zitat antworten
Alt 05-08-2003, 16:03   #8 (permalink)
]chl[
 
Benutzerbild von chlerub
 
Registriert seit: Oct 2001
Ort: Düsseldorf
Beiträge: 220
Ich glaub jetzt hab ichs verstanden.
Kleine Idee:

Ich persönlich finde MCs mit mehr als 3 frames eher abstossend, also würde ich des schnonmal scripten.
Ausserdem würde ich die kreise nicht relativ zur mausbewegung skalieren, sondern lieber "abgebremst" skalieren, wenn der mauszeiger einen bestimmten bereich überschreitet. Ums mal kurz zu skizzieren: 1 MC "kreis" hat 1 methode "ease(per,speed)". Jetzt legst du dem MC n-mal auf die Bühne und checkst pro MC die mauspos ab. Und wenn die Maus die distance X überschreitet, wird ein MC skaliert (und umgekehrt).

Mal mal nen Kreis->in symbol konvertieren, doppelt anklicken und das hier ins erste bild pasten:

ActionScript:
  1. function ease(per, speed) {
  2.     this.onEnterFrame = function() {
  3.         if (this._xscale != per) {
  4.             this._xscale += (per-this._xscale)/speed;
  5.         } else {
  6.             delete this.onEnterFrame;
  7.         }
  8.     };
  9. }
  10. this.onMouseMove = function() {
  11.     dist = getDistance(this._x, this._y, _root._xmouse, _root._ymouse);
  12.     if (dist<100) {
  13.         ease(200, 4);
  14.     } else {
  15.         ease(100, 4);
  16.     }
  17. };
  18. function getDistance(m_x, m_y, g_x, g_y) {
  19.     a = g_x-m_x;
  20.     b = g_y-m_y;
  21.     c = Math.sqrt(Math.abs(Math.abs(a*a)-Math.abs(b*b)));
  22.     return c;
  23. }

Das sollte dir weiterhelfen.

Geändert von chlerub (05-08-2003 um 16:05 Uhr)
chlerub ist offline   Mit Zitat antworten
Alt 05-08-2003, 16:56   #9 (permalink)
verdammt guter kaffee!!!
 
Benutzerbild von flashgordoncole
 
Registriert seit: Mar 2002
Ort: augsburg
Beiträge: 480
wow! Tausend Dank dafür!

Kleine Korrektur für die richtige Hypotenuse:

ActionScript:
  1. c = Math.sqrt(Math.abs(Math.abs(a*a)+Math.abs(b*b)))
So, und jetzt muss ich mir mal das Thema Funktionen vornehmen

/edit:
ActionScript:
  1. delete this.onEnterFrame;
Wird hier der onEnterFrame abgeschaltet sobald die Bedingung erfüllt ist? Und dann damit
ActionScript:
  1. this.onMouseMove = function()
wieder initiert?

Sowas geht auch? Ungläubig kopfschüttelnd

f-g-c

Geändert von flashgordoncole (05-08-2003 um 17:06 Uhr)
flashgordoncole ist offline   Mit Zitat antworten
Alt 05-08-2003, 17:10   #10 (permalink)
]chl[
 
Benutzerbild von chlerub
 
Registriert seit: Oct 2001
Ort: Düsseldorf
Beiträge: 220
oh ja - richtig...was man bei copy&paste so alles übersieht

getDistance() übrigens von flashpower.de | script by ChRiZmO

zum letzten post:

jo, so läufts.. delete this.onEnterFrame ist ja selbstsprechend....die funktion auf dem onMouseMove-event checkt nur die distance...ergebnis ist, dass der onEnterFrame eigentlich ständig neu abgefeuert wird, ausser du bewegst die maus nicht (klein-gross-klein-gross)

Geändert von chlerub (05-08-2003 um 17:14 Uhr)
chlerub 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 23:22 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele