2012-02-27 4 views
2

저는 C# 및 XNA를 처음 사용합니다. 간단한 게임을 만들려고하는데 방향에 사용될 때 Vector2가 어떻게 작동하는지 잘 모르겠습니다. 임의의 방향을 생성하는 코드 줄이 있지만 두 자리는 왜 두 곳입니까? 두 번째 또는 첫 번째 X와 두 번째 Y의 X와 Y입니까? 아니면 각도에 ​​관한 것입니까? 그것은 100보다 큰 숫자일까요?임의의 2D 방향 벡터 생성 이해

direction = new Vector2(Game1.rnd.Next(-100, 100), Game1.rnd.Next(-100, 100)); 
direction.Normalize(); 
+1

랜덤 방향을 생성하는 방법은 시작 영역이 정사각형이기 때문에 대각선 방향을 따르는 것이 균일하지 않으며 소스 벡터가 0 일 경우 예외가 발생합니다 (Dervall이 언급 함. 귀하의 코드에서 1 - 40000 기회). 랜덤 앵글로 시작하여 방향을 생성하는 더 좋은 방법은 다음과 같습니다 : var angle = random.NextDouble() * Math.PI; var direction = new Vector2 ((float) Math.Cos (angle), (float) Math.Sin (angle));'. 정수가 아닌 부동 소수점을 생성하기 위해'Next'보다는'NextDouble'을 사용합니다. –

+0

나는 이것이 늙은 엉뚱한 코멘트라는 것을 알고있다. 어쨌든 그것을 위해 갈 것이다 :)'random.NextDouble()'은 0과 1 사이의 값을 생성하고 이것을 생성하는'Math.PI'와 곱하지 않을 것이다. 호? 나는'Math.TooPi' (또는 동급)로 곱하면 전체 원을 생성 할 것이라고 가정 할 것인가? 내가 이걸 거꾸로 쓴다면 (그리고 다시 그런 오래된 질문이나 코멘트에 대해 논평 해 주셔서) 미안 하구나. :). – Tobbe

답변

1

두 개의 인수 인 임의 함수의 범위를 사용하는 것은 Random.Next입니다. Vector2의 생성자는 두 개의 매개 변수 만 사용합니다.

2D 벡터는 X 축 방향과 Y 축 방향의 두 가지 크기로 구성됩니다. 귀하의 코드가하는 일은 임의의 방향을 가리키는 임의의 벡터를 생성하는 것입니다. 이것을 방향 벡터로 사용하여 길이를 1로 설정합니다.

이 경우 숫자는 Normalize이므로이 숫자는 임의입니다. X와 Y 축의 범위가 동일하다면 함수가 같은 방식으로 동작 할 것이므로 숫자를 사용할 수 있습니다.

X와 Y가 동시에 0 일 경우이 벡터 생성 방법은 실패합니다. 이것은 보일지 모르지만 일어날 수 있습니다.

+0

흠, 이제 알았어, Random. 다음 (-100,100)이 한계이므로 -100에서 100 사이의 숫자를 만들 수 있습니까? 그러나 나는 방향에 관해 아직도 조금 혼란 스럽다. 맞나요? X가 -1이면 스프라이트가 왼쪽으로 이동하고 Y가 -1이면 스프라이트가 왼쪽으로 아래쪽으로 이동합니다. –

+2

범위에 관해서는 당신이 맞습니다. 길 찾기와 관련해서는 다릅니다. 좌표계 설정 방법에 따라 다릅니다. 화면 공간의 경우 일반적으로 오른쪽 + x, 오른쪽 + y가 내려갑니다. 알아내는 가장 쉬운 방법은 직접 테스트하는 것입니다. – Dervall