Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-12-2004, 21:45   #1 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Beiträge: 15
Unhappy Ungenauigkeit beim hin- und herschieben.

Hallo.
Ich hatte mir mal so eine Sache gemacht zum hin- und herschieben von MCs. Erst jetzt ist mir aufgefallen das es da zu Ungenauigkeiten kommt. Ich sage zum Beispiel x=20 und y=50. Das geht zwar in die Richtung, aber teilweise geht es auch 0,5384 Pixel drüber. Ich habe hier das Script:

PHP-Code:
MovieClip.prototype.= function(xyas) {
    
this.onEnterFrame = function() {
        
this._y this._y+(y-this._y)/s;
        
this._x this._x+(x-this._x)/s;
        
this._alpha this._alpha+(a-this._alpha)/s;
        if (
this._y == and this._x == and this._alpha == a) {
            
trace("Ende");
            
delete this.onEnterFrame;
        }
    };
}; 
Was kann man da machen das wirklich am Ende der MC an der angegebenen Position stehen bleibt?
Nukko ist offline   Mit Zitat antworten
Alt 08-12-2004, 23:37   #2 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 18
Hi

Du kannst am Ende (also wenn die if-Bedingung erfüllt ist) die Position explizit setzen

this._x = x;
this._y = y;

lg
NoNick ist offline   Mit Zitat antworten
Alt 09-12-2004, 07:27   #3 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Beiträge: 15
Hallo.
Das stimmt. Aber soweit kommt es gar nicht. Ich hatte extra am Ende
PHP-Code:
trace("Ende"); 
geschrieben, damit ich schauen kann wann es soweit ist, und eventuell dann noch mal die Werte bereinige. Allerdings kommt es nicht zu einem Ende
Nukko ist offline   Mit Zitat antworten
Alt 09-12-2004, 09:43   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 18
Hi

Das hatte ich um die Uhrzeit wohl überlesen ;-)

Du kannst die Differenz zwischen aktueller Position und Zielposition berechnen und eben damit arbeiten.

ActionScript:
  1. var difX = -this._x + x;
  2. var difY = -this._y + y;
  3. if (Math.round(Math.abs(difX)) > 0 || Math.round(Math.abs(difY)) > 0){
  4. this.onEnterFrame = function(){
  5. //bewege weiter
  6. } else {
  7. this._x = x;
  8. this._y = y;
  9. delete this.onEnterFrame;
  10. }

lg
NoNick ist offline   Mit Zitat antworten
Alt 09-12-2004, 16:42   #5 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Beiträge: 15
Smile

Hallo!
Das mit der Differenz zwischen «jetzt» und «soll» ist nicht schlecht. Leider steig ich noch nicht ganz dahinter wo man das dann einsetzt
Ich weis, ganz schön unhöfflich von mir...aber nunja. Wie sieht das dann komplett aus
Nukko ist offline   Mit Zitat antworten
Alt 09-12-2004, 19:18   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: münchen
Beiträge: 25
Hi Nukko,

hier liegt der Fehler;
PHP-Code:
if (this._y == and this._x == and this._alpha == a
das this._y nähert sich zwar dem wert y, der aber nie genau den wert annehmen:

besser so was:
PHP-Code:
if(Math.sqrt(this._y-y)<2
.richard

Geändert von gondola (09-12-2004 um 19:19 Uhr)
gondola ist offline   Mit Zitat antworten
Alt 09-12-2004, 20:43   #7 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Beiträge: 15
Unhappy

Gut das mit der Differenz Hehe...

Ich habe das mal so gemacht, da kommt dann nur noch komische Sachen raus:
PHP-Code:
MovieClip.prototype.= function(xyas) {
    
this.onEnterFrame = function() {
        if (
Math.sqrt(this._alpha-a)<2) {
            
ok += 1;
        } else {
            
this._alpha this._alpha+(a-this._alpha)/s;
        }
        if (
Math.sqrt(this._y-y)<2) {
            
ok += 1;
        } else {
            
this._y this._y+(y-this._y)/s;
        }
        if (!
Math.sqrt(this._x-x)<2) {
            
ok += 1;
        } else {
            
this._x this._x+(x-this._x)/s;
        }
        if (
ok == 3) {
            
delete ok;
            
delete this.onEnterFrame;
        }
    };
}; 

Kann man denn da wirklich nichts mehr machen?
Ich übergebe an x y und a folgendes:
Code:
100 | 100 | 20
Und raus kommt:
Code:
98.55 | 98.55 | 19.921875
Nukko ist offline   Mit Zitat antworten
Alt 10-12-2004, 11:01   #8 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: münchen
Beiträge: 25
du hast es ja schon, noch eine kleine Ämderung:

PHP-Code:
if (ok == 3) {
//jetzt die endwerte: 
this._alpha=a
this
._x=x
this
._y=y
delete this
.onEnterFrame


Geändert von gondola (10-12-2004 um 11:02 Uhr)
gondola ist offline   Mit Zitat antworten
Alt 10-12-2004, 22:16   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 18
ActionScript:
  1. MovieClip.prototype.move = function(targetX, targetY, delay) {
  2.     if (this._x != targetX || this._y != targetY) {
  3.         this.onEnterFrame = function() {
  4.             var difX = -this._x+targetX;
  5.             var difY = -this._y+targetY;
  6.             if (Math.round(Math.abs(difX))>0 || Math.round(Math.abs(difY))>0) {
  7.                 this._x += difX/delay;
  8.                 this._y += difY/delay;
  9.             } else {
  10.                 this._x = targetX;
  11.                 this._y = targetY;
  12.                 delete this.onEnterFrame;
  13.             }
  14.         };
  15.     }
  16. };
NoNick ist offline   Mit Zitat antworten
Alt 11-12-2004, 20:45   #10 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Beiträge: 15
Sehr gut

So funktioniert es prima. Dankeschön
Nukko 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 08:01 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele