2012-04-04 2 views
0

Я создаю игру, которая использует тригонометрию для вычисления и отображения расстояния и градусов в динамических текстовых полях. Я вычисляю расстояние моего курсора от центра клипа. И используя этот центр клипа, я пытаюсь вычислить и отобразить полный 360º, когда мой курсор перемещается по swf. У меня есть дистанционная часть игры, но часть, отображающая градусы, работает неправильно. Динамическое текстовое поле отображается только с 90º до 270º. Вместо того, чтобы проезжать от 270º до 360º/0º до 90º, он просто отсчитывает от 270º до 90º. Ниже приводится мой ActionScript. Я бы очень признателен за любую помощь или предложения. Благодаря!Как показать полный 360 градусов с помощью ActionScript 2 и Trigonometry?

//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); 

} 

ответ

0

Параметры для atan2 должны быть дельта-у и дельта-х между двумя точками, но вы проходя расстояние между двумя точками и дельта-х. Попробуйте это вместо:

radians = Math.atan2(a, b); 

Следующая проблема заключается в том, чтобы преобразовать радианы в градусы. Чтобы преобразовать радианы в градусы, вы можете сделать это:

degrees_txt = radians * 180/Math.PI; 

Обратите внимание, что atan2 возвращается от между -Math.PI/2 до Math.PI/2. При преобразовании в градусы этот диапазон становится от -180 до 180. Для преобразования в 0 до 360 вы можете добавить 360 к результату, если он отрицательный:

if(degrees_txt < 0) degrees_txt += 360;