Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-02-2008, 14:25   #1 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
Objektrotation Problem (finde den Thread nicht mehr)

Moin,

Wie im Titel schon erwähnt, gab es hier schon Mal einen Thread zu meinem Problem. Leider finde ich ihn nicht mehr

Folgendes:
Objekt richtet sich zum Mauszeiger hin aus und folgt ihm. Wie zB ein Auto. Das hat natürlich einen Wendekreis, soll heißen mein Objekt rotiert mit einer bestimmten Rotationsgeschwindigkeit. Ich weiß aber nicht mehr wie ich abfange, dass es bei 180 Grad nicht plötzlich eine fast 360 Grad Drehung macht.

Liegt wohl daran, dass die Rotation nicht von 0 bis 360 geht, sondern von -180 bis 180. Ich weiß jetzt aber nicht wie ich das in eine if-Bedingung einbaue.

In dem Thread den ich hier schon Mal gefunden hatte, ging es um einen Hubschrauber, wenn ich mich recht erinnere.
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi
dark-future ist offline   Mit Zitat antworten
Alt 18-02-2008, 14:40   #2 (permalink)
CodeGecko
 
Benutzerbild von hellslawyer
 
Registriert seit: Aug 2007
Ort: Hagen
Beiträge: 1.242
Schau mal im Programmladen von hgseib vorbei. Da gibts ein nettes Beispiel zur Rotation in Abhängigkeit von der Mausposition:
Seibs Programmladen
-> Position -> blick2cursor
__________________
Grütze Reinhart

XING || Simple Flash-Filter-Generator || DateChooser (AS3)
MovieClipLoader-Example (AS2) || PreloaderClass (AS2) || Framechecker-Component (AS2)

Bitte keine Flashfragen per PN oder ICQ. Dafür ist das Forum da.
hellslawyer ist offline   Mit Zitat antworten
Alt 18-02-2008, 15:40   #3 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
Ok, das sieht schon Mal recht gut aus, ty.

Was ich meinte war eher "richtung_soften". Was mir daran aber noch nicht gefällt ist, dass sich der Clip abhängig vom Winkel unterschiedlich schnell dreht. Der Clip sollte schon eine feste Rotationsgeschwindigkeit haben. Geht um ein Spiel. Und zB Schiffe rotieren halt immer gleich schnell, die die es können. Das mag ja pingelig erscheinen, aber wenn schon...

Also die Zeilen 11 & 12, nehme ich an:
ActionScript:
  1. dx = _root._xmouse - p.x;
  2. dy = p.y - _root._ymouse;
  3.    
  4. var daemfung = 7;
  5.    
  6. rad = 180/Math.PI;
  7. max = Math.max(Math.abs(dx), Math.abs(dy));
  8. dx /= max;
  9. dy /= max;
  10. w = this._rotation/rad;
  11. dx += daemfung*Math.sin(w);
  12. dy += daemfung*Math.cos(w);
  13. this._rotation = Math.atan2(dx, dy)*rad;

Wenn ich mir den ganzen Code so ansehe, dann weiß ich jetzt nicht genau was da eigentlich gemacht wird. Deshalb kann ich das auch schlecht ändern. Gibt es für die Problematik vlt. einen einfacheren Lösungsweg?
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi
dark-future ist offline   Mit Zitat antworten
Alt 19-02-2008, 12:00   #4 (permalink)
Bionicman
 
Benutzerbild von dark-future
 
Registriert seit: Apr 2007
Ort: Oberhausen - NRW
Beiträge: 29
Ok, hat lange gedauert, aber jetzt hab ich es auch selber geschafft.

Der Code ist zwar bedeutend länger aber ich kann ihn nachvollziehen und somit ist er für mich die bessere Lösung

thx noch für die Tipps.

ActionScript:
  1. onClipEvent(load) {
  2.     this.rotSpeed = 6;
  3.     this.speed = 6;
  4.    
  5.     function toGOOD(winkel) {
  6.         if(winkel < 0) winkel += 360;
  7.         return winkel;
  8.     }
  9.    
  10.     function toSTUPID(winkel) {
  11.         if(winkel > 180) winkel -= 360;
  12.         return winkel;
  13.     }
  14. }
  15.  
  16. onClipEvent(enterFrame) {
  17.     dx = _root._xmouse - this._x;
  18.     dy = _root._ymouse - this._y;
  19.    
  20.     // turn it
  21.     rad = Math.atan2(dy,dx);
  22.     winkel = rad*180/Math.PI;
  23.    
  24.     winkel = toGOOD(winkel);
  25.     myWinkel = toGOOD(this._rotation);
  26.     diff = myWinkel - winkel;
  27.     if(diff < 0) side = true;
  28.     else side = false;
  29.    
  30.     diff = Math.abs(diff);
  31.     if(diff > 180) side=!side;
  32.    
  33.     winkel = toSTUPID(winkel);
  34.    
  35.     if(this._rotation < winkel-this.rotSpeed/2 || this._rotation > winkel+this.rotSpeed/2) {
  36.         if(side) {
  37.             this._rotation += this.rotSpeed;
  38.         } else {
  39.             this._rotation -= this.rotSpeed;
  40.         }
  41.     } else {
  42.         this._rotation = winkel;
  43.     }
  44.    
  45.     // move it
  46.     movRad = this._rotation/180*Math.PI;
  47.     y = Math.sin(movRad);
  48.     x = Math.cos(movRad);
  49.    
  50.     this._x += x * this.speed;
  51.     this._y += y * this.speed;
  52.    
  53. }
Angehängte Dateien
Dateityp: zip rotation.zip (5,6 KB, 9x aufgerufen)
__________________
Gruß, Bionicman

Deutscher Entwicklerpreis
Aruba Studios
Quo Vadis Deutsche Spielebranche


Dass mir mein Hund das Liebste sei, sagst du oh Mensch sei Sünde,
mein Hund ist mir im Sturme treu, der Mensch nicht mal im Winde.

Franz von Assisi
dark-future 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:08 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele