Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-02-2005, 00:52   #1 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
Problem beim Dynamischen Abbremsen eines Objektes (Positions Stimmt nicht)

Hi leute,
schon wieder hab ich ein kleines Problem.
Ich nutze schon lange folgende Formel zum Dynamischen Abbremsen von Objekten:
_stepx = (_x-x)/speed;
_x -= _stepx;

x = End Punkt.

Nun ist das Problem aber, dass wenn x = 500 sein soll, es meisten sowas wie 498.3 ist. Nur bei speed 1 klappt es richtig.
Gibt es da nicht eine elegantere Lösung? Die Endpunkte müssen schon 100% exakt sein

Bin dankbar für jede idee.

gruss x²
__________________
Tjo...

Geändert von DoppelX (10-02-2005 um 07:39 Uhr)
DoppelX ist offline   Mit Zitat antworten
Alt 10-02-2005, 04:52   #2 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
Hast mal gerundet Math.round() oder kommt das in deinem Fall nicht in Frage.

Liebe Grüsse
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 10-02-2005, 07:34   #3 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
He Madokan,
danke für deine Schnelle Antwort.
Math.round war auch mein erster Gedanke.
Funktioniert aber auch dann aber auch nicht mehr richtig.
Bei den koordinaten x:1 bleibt er bei x:3.95 stehen. Da ist die Differenz zum Ziel noch grösser (ist aber vom speed abhängig).

Naja, bei mir muss das aber halt wirklich stimmen. Wenn ich dem Objekt sage es soll zu x:50 gehen, dann möchte es das bitte auch

Sonst kann ich ja nie Abfragen ob das Objekt dort angekommen ist.
Hast du/Habt ihr sonst noch eine Idee?

danke schonmal


gruss x²
__________________
Tjo...

Geändert von DoppelX (10-02-2005 um 07:36 Uhr)
DoppelX ist offline   Mit Zitat antworten
Alt 10-02-2005, 08:33   #4 (permalink)
Boardergott
 
Benutzerbild von Endorphie
 
Registriert seit: Dec 2003
Beiträge: 176
Du könntest es so machen, das du dem MC den Speed=1 gibst wenn er kurz vorm ziel ist, also z.B.

PHP-Code:
if(MC_Clip._x>490speed=1
oder so ähnlich....war nur so ne Idee in der frühen Morgenstunde!!

Gruß Endorphie
__________________
-----------------------
P.E.B.K.A.C.
Problem Exists Between Keyboard And Chair
Endorphie ist offline   Mit Zitat antworten
Alt 10-02-2005, 09:48   #5 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
hm..
Ist aber ja leider nicht sinn der Sache. Dann Bremst er ja nicht mehr vollständig ab

Keiner sonst eine Idee?
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 10-02-2005, 17:55   #6 (permalink)
ebi
FLASH DESIGNER
 
Registriert seit: Jun 2002
Ort: Aachen
Beiträge: 310
mach doch einfach die IF Abfrage, ob der noch 1px vom Ziel entfernt ist und setze dann, wenn das der Fall is, das Objekt dann auf die Zielkoordinaten.

So habe ich das früher auch schon mal gemacht, weil ich das gleiche Problem hatte... Hatte damals keine andere Lösung gefunden und wenn nicht so ein PC-Freak 2cm vorm Monitor hängt, sieht man das gar nicht. Sonst würdeste ja auch immer die kleinen Sprünge sehen wenn du die X-Position änderst.
__________________
Greetings EBI

Bester Dank geht immer an die, die mich unterstützen.
ebi ist offline   Mit Zitat antworten
Alt 10-02-2005, 18:28   #7 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
Ne, leider auch zu ungenau

Da muss ich ja ätliche if abfragen machen. Wenn Grösser, Wenn kleiner, bla...
Vor allem kommt es immer auf den Speed an.
Es können auch 5 Pixel Tolleranz entstehen bei dieser Formel.

Da sollte schon eine Vernümpftige Formel her kein fusch
__________________
Tjo...

Geändert von DoppelX (10-02-2005 um 22:54 Uhr)
DoppelX ist offline   Mit Zitat antworten
Alt 10-02-2005, 22:55   #8 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
*schieb*
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 11-02-2005, 06:12   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2001
Beiträge: 126
wert=Math.round(wert+(zielwert-wert)/faktor);

also z.B.

targetX=500;
bewege=setInterval(function(){
myMc._x=Math.round(myMc._x+(targetX500-myMc._x)/12);
if(myMc._x==targetX) clearInterval(bewege);
},50)

funktioniert eigentlich super (faktor: je höher, desto langsamer die näherung)

g.
+mploj+
mploj ist offline   Mit Zitat antworten
Alt 11-02-2005, 18:28   #10 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
hm. Um ehrlich zu sein fand ich bis jetzt jede lösung für fusch
Nen Setinterval dort einzubauen ist unnötig.

Eine vernümpftige Formel wird es ja wohl geben
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 11-02-2005, 20:25   #11 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Eigentlich sollte der Mc sich immer bei einer Distanz < 1 einpendeln. Warum baust du dir dann nicht einfach eine Abbruchbedingung mit ein.

ActionScript:
  1. if( distanz < 1 ) {
  2. _x = zielX;
  3. //animation stoppen eg. delete _root.onEnterFrame;
  4. }
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 11-02-2005, 23:21   #12 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
he e2e4 da hätte ich auch selber drauf kommen können
Danke für den Denkanstoss.
Diser 1Px fällt ja auch nicht wirklich auf.

Klappt nun übrigens.
Nochmal für die Suche:

Distanz:
PHP-Code:
if(_x_distx _x; else _distx _x x;
if(
_y_disty _y; else _disty _y y
Berechnen (mach mal nur x. y ist genau das gleiche):
PHP-Code:
if(_distx >= 1) {
    
_stepx = (_x-x)/speed;
    
_x -= _stepx;
}else { 
_x x; } 
__________________
Tjo...
DoppelX ist offline   Mit Zitat antworten
Alt 12-02-2005, 08:41   #13 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Die If -Abfragen kannst dir sparen:

ActionScript:
  1. dx = Math.abs( _x - x );
  2. dy = Math.abs( _y - y );
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 12-02-2005, 18:05   #14 (permalink)
Überzeugter Flasher...
 
Benutzerbild von DoppelX
 
Registriert seit: Oct 2001
Ort: Köln
Beiträge: 1.654
*ahhhh*

Kannte Math.abs noch garnicht.... *an kopf fass*
Hätte ich auf jedenfall schon viel früher benutzen sollen. Hätte vieles einfacher gemacht

Naja man lernt ja bekanntlich nie aus
Und einen Performancevorteil bietet es auch.

gruss x²
__________________
Tjo...

Geändert von DoppelX (12-02-2005 um 18:08 Uhr)
DoppelX 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 04:52 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele