2012-04-04 1 views
0

Ich erstelle ein Spiel, das Trigonometrie verwendet, um Entfernung und Grad in dynamischen Textfeldern zu berechnen und anzuzeigen. Ich berechne die Entfernung meines Mauszeigers von der Mitte eines Movieclips. Und mit dieser Mitte des Movieclips versuche ich eine volle 360º zu berechnen und anzuzeigen, während sich mein Cursor um den swf bewegt. Ich habe den Abstandsteil des Spiels funktioniert, aber der Teil, der Grad anzeigt, funktioniert nicht richtig. Das dynamische Textfeld wird nur zwischen 90º und 270º angezeigt. Anstatt über 270º bis 360º/0º bis 90º zu gehen, zählt es nur noch von 270º bis 90º herunter. Unten ist mein ActionScript. Ich würde sehr jede Hilfe oder Vorschläge schätzen. Vielen Dank!Wie zeige ich volle 360 ​​Grad mit Actionscript 2 und Trigonometrie an?

//Mouse and Dynamic Text Boxes------------------------- 

Mouse.hide(); 

onMouseMove = function() { 
feedback.text = "You are moving your mouse"; 
cursor._x = _xmouse; 
cursor._y = _ymouse; 
updateAfterEvent(); 
xmouse_value.text = Math.atan2((a), (b)); 
ymouse_value.text = Math.round(radians*180/Math.PI) 
updateAfterEvent(); 
}; 

Mouse.addListener(myListener); 


//distance (RANGE) 
_root.onEnterFrame = function() { 
xmid = Stage.width/2; 
ymid = Stage.height/2; 

a = _root._ymouse-ymid; 
b = _root._xmouse-xmid; 
c = Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2)); 
feedbacka.text = Math.round(a); 
feedbackb.text = Math.round(b); 
feedbackc.text = Math.round(c/30.4); 

updateAfterEvent(); 

var radians:Number; 
var degrees:Number; 

//Calculcate Radians 
//Radians specify an angle by measuring the length around the path of the circle. 
radians = Math.atan2((c), (b)) 

//calculate degrees 
//the angle the circle is in relation to the center point 
//update text box inside circle 
radians_txt = Math.round(radians*360/Math.PI); 
degrees_txt = Math.round(radians*180/Math.PI); 

updateAfterEvent(); 

//getting past 270 degrees 

radians2_txt = Math.round(radians/Math.PI); 
radians2_txt = Math.floor(radians + -270); 

} 

Antwort

0

Die Parameter atan2 sollte die Delta-Y und Delta-X zwischen den zwei Punkten, aber Sie sind, um die Entfernung zwischen den beiden Punkten und der delta-x verläuft. Versuchen Sie dies stattdessen:

radians = Math.atan2(a, b); 

Das nächste Problem ist, das Radiant in Grad zu konvertieren. So konvertieren Radiant in Grad, können Sie dies tun:

degrees_txt = radians * 180/Math.PI; 

Beachten Sie, dass atan2 Renditen von zwischen -Math.PI/2-Math.PI/2. Bei der Umrechnung in Grad wird dieser Bereich -180 bis 180. Um zu 0 bis 360 zu konvertieren, können Sie 360 ​​zum Ergebnis hinzufügen, wenn es negativ ist:

if(degrees_txt < 0) degrees_txt += 360; 
Verwandte Themen