2011-12-02 4 views
0

플래시 게임을 프로그래밍 중이므로 일부 영화 클립이 따라야하는 포인트 배열 (x 및 y 위치)을 만들었습니다. 그 영화 클립에는 특정 속도가 있습니다 (그들은 현재 5 픽셀 단위로 단계를 밟습니다). 수평 또는 수직으로 움직이기를 원할 때, 다 괜찮아요, 그 클립의 x 또는 y를 5 픽셀 추가하거나 제거해야합니다. 그러나 때때로 그들은 대각선으로 움직여야 만하고 이제는 복잡합니다. 내가 뭘 어떻게AS3 : 대각선 이동

:

var angle:Number = Math.atan2(nextPoint.y - this.y, nextPoint.x - this.x) * 180/Math.PI; 
var xstep:Number = Math.cos(angle) * this.speed; 
var ystep:Number = Math.sqrt(Math.pow(this.speed, 2) - Math.pow(xstep, 2)); 

this.x += xstep; 
this.y += ystep; 

그것은 코드의 일부입니다,하지만 난 당신이 필요로하는 모든 것 같아요. 기본적으로 이것은 내 영화 클립이 약간의 단계 (this.speed (현재 5로 설정) 픽셀 수)를 수행합니다.

현재 지점과 다음 지점의 y 위치가 같으면 정상적으로 작동합니다. 그렇지 않으면 작동하지 않습니다. 각도는 처음에는 적당하지만 천천히 감소합니다 (동일하게 유지해야 함). 나는 그것이 올바른 방법으로 계산되지 않은 각도인지, 아니면 x와 y 스텝인지를 모르지만 그 중 하나입니다.

답변

2

대신을 시도 cos라디안에 각도에서 작동

var angle:Number = Math.atan2(nextPoint.y - this.y, nextPoint.x - this.x); 
var xstep:Number = Math.cos(angle) * this.speed; 
var ystep:Number = Math.sin(angle) * this.speed; 

때문에도로 변환 할 필요가 없습니다. 각도의 y 구성 요소를 계산할 때는 sin을 사용하므로 x와 유사해야합니다. 이 문제를 테스트 할 수는 없지만 ystep은 거꾸로 돌아가며 -1을 곱해야 할 수 있습니다.

+0

처음에는 ystep에 대한 피타고라스 정리를 사용했지만, 나는 당신의 방식을 더 좋아합니다. 이제는 작동합니다. 라디안을 각도로 변경하지 않아도됩니다. 고마워, 내가 기억할거야, 하하. –