Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-10-2004, 15:03   #1 (permalink)
...
 
Benutzerbild von flash bier
 
Registriert seit: Nov 2001
Beiträge: 1.227
Mausrichtungsanzeiger Verbesserungsvorschläge

Gruss zuvor,

bastel gerade an einem Mausrichtungsanzeiger rum.
Geht schon, aber nicht so wirklich, es zittert mir etwas zu arg !
Vielleicht hast du ja nen Verbesserungsvorschlag.
Einfach mal folgendes Script in den ersten Frame und los:
ActionScript:
  1. _root.createEmptyMovieClip("geraet",1);
  2. geraet.lineStyle(0,0x000000,100);
  3.  
  4. geraet.moveTo(-50,-25);
  5. geraet.beginFill(0xff0000);
  6. geraet.lineTo(50,-25);
  7. geraet.lineTo(50,25);
  8. geraet.lineTo(-50,25);
  9. geraet.lineTo(-50,-25);
  10. geraet.endFill();
  11.  
  12. onEnterFrame=function(){
  13.     _actX=_xmouse;
  14.     _actY=_ymouse;
  15.     neuerWINKEL=Math.atan2(_actY-_oldY,_actX-_oldX)/Math.PI*180;
  16.    
  17.     if(neuerWINKEL!=alterWINKEL && neuerWINKEL!=0){
  18.         geraet._rotation=neuerWINKEL;
  19.     }
  20.    
  21.     geraet._x=_root._xmouse;
  22.     geraet._y=_root._ymouse;
  23.     _oldX=_xmouse;
  24.     _oldY=_ymouse;
  25.     alterWINKEL=neuerWINKEL;
  26. }

Wäre Dankbar !!
Es sollte so bei 30 fps laufen !

MfG flash bier
__________________
Schweig oder sprich Worte, die besser sind als Schweigen !
flash bier ist offline   Mit Zitat antworten
Alt 21-10-2004, 21:45   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
vielleicht solltest du nicht immer die letzten Koordinaten nehmen, sondern die vorletzten. Dann wäre es auch bei langsamen Bewegungen etwas besser.

Zudem könntest du den Winkel immer an den richtigen Winkel annährern, indem so sowas wie:

rotation += winkelunterschied / n;

machst. Dabei ist n z.B. 2; es bestimmt, wie schnell angenährt wird.
Für den Winkelunterschied brauchst du noch eine Funktion wie die folgende:

PHP-Code:
_global.getAngleDifference = function(a,b)
{
    
/*
    gibt den kleineren orientierten Winkel (a,b) zurück
    */
    
var a;
    if(
180)
    {
        return ((
180) % 360 ) - 180;
    }
    else if(
< -180)
    {
        return ((
180) % 360 ) + 180;
    }
    else
    {
        return 
360;
    }
}; 
die simple Differenz kannst du nicht nehmen, da das 360 = 0 Grad Problem auftritt.
Janoscharlipp ist offline   Mit Zitat antworten
Alt 21-10-2004, 23:35   #3 (permalink)
...
 
Benutzerbild von flash bier
 
Registriert seit: Nov 2001
Beiträge: 1.227
Ha ....
Hab die Methode der Näherung auch gleich auf die Positionsberechnung angewendet !
Viel, viel geschmeidiger !!!!

THX .... und nochwas ???
Wäre beispielsweise ein Intervall von Vorteil ?

MfG flash bier
__________________
Schweig oder sprich Worte, die besser sind als Schweigen !
flash bier ist offline   Mit Zitat antworten
Alt 22-10-2004, 12:56   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
nö, Interval bringt denke ich keinen Vorteil. Damit entkoppelst du ja einfach den Aufruf der Funktion von den Frames.

Du könntest mit onMouseMove arbeiten, dort die Koordinaten und Winkel berechnen, die letztendliche Rotation und Verschiebung aber dann in einem onEnterFrame abarbeiten. (sonst hört die Nährung plötzlich auf, wenn die Maus anhält, obwohl noch garnicht die richtigen Werte erreicht sind)
Aber wenns gut aussieht...nichts mehr ändern
Janoscharlipp ist offline   Mit Zitat antworten
Alt 22-10-2004, 13:00   #5 (permalink)
...
 
Benutzerbild von flash bier
 
Registriert seit: Nov 2001
Beiträge: 1.227
ActionScript:
  1. _root.createEmptyMovieClip("geraet",1);
  2. geraet.lineStyle(0,0x000000,100);
  3.  
  4. geraet.moveTo(-100,-25);
  5. geraet.beginFill(0xff0000);
  6. geraet.lineTo(50,-25);
  7. geraet.lineTo(50,25);
  8. geraet.lineTo(-100,25);
  9. geraet.lineTo(-100,-25);
  10. geraet.endFill();
  11. var countUp=0;
  12. var rot_geschw=20;
  13. var diffX=0;
  14. var diffY=0;
  15.  
  16. onEnterFrame=function(){
  17.     countUp+=1;
  18.     //trace(countUp);
  19.     diffX=Math.abs(_xmouse - geraet._x);
  20.     diffY=Math.abs(_ymouse - geraet._y);
  21.     //hier noch den entgültigen Abstand aus obigem errechnen !!
  22.    
  23.     if(diffX>20 or diffY>20){
  24.         rot_geschw=5;
  25.     }else{
  26.         rot_geschw=20;
  27.     }
  28.     _actX=_xmouse;
  29.     _actY=_ymouse;
  30.    
  31.     geraet._x  = geraet._x( _actX- geraet._x )/5;
  32.     geraet._y  = geraet._y( _actY- geraet._y )/5;
  33.     neuerWINKEL=Math.atan2(_actY-_ganzoldY,_actX-_ganzoldX)/Math.PI*180;
  34.     if(neuerWINKEL != 0){
  35.         winkelunterschied=getAngleDifference(alterWINKEL,neuerWINKEL);
  36.         geraet._rotation += winkelunterschied/rot_geschw;
  37.     }
  38.     if(countUp == 5){
  39.         countUp=0;
  40.       _ganzoldX=_actX;
  41.         _ganzoldY=_actY;
  42.     }
  43.     alterWINKEL=geraet._rotation;
  44. }
  45.  
  46.  _global.getAngleDifference = function(a,b)
  47. {
  48.     /*
  49.     gibt den kleineren orientierten Winkel (a,b) zurück
  50.     */
  51.      var d = b - a;
  52.     if(d > 180)
  53.     {
  54.         return ((d + 180) % 360 ) - 180;
  55.     }
  56.     else if(d < -180)
  57.     {
  58.         return ((d - 180) % 360 ) + 180;
  59.     }
  60.     else
  61.     {
  62.         return d % 360;
  63.     }
  64. };

finde ich schon nicht schlecht !

MfG flash bier
__________________
Schweig oder sprich Worte, die besser sind als Schweigen !
flash bier 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 20:02 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele