2014-03-25 2 views
2

내 Xna 게임에서, 나는 그것이 실행되고있는 화면에 나의 플레이 필드 스케일을 갖기 위해 노력하고 있습니다. 이렇게하기 위해 비율을 사용하여 실제 창을 내 플레이 필드와 비교하여 비율을 조정하는 비율을 찾습니다. 이를 위해 실제 너비를 가상 너비로 나눕니다.두 숫자를 항상 나누는 것이 0입니까?

float _percent = _realViewport.Width/this._viewport.Width; 

언제나 _percent 변수에 0이 표시됩니다. 내 코드에서 해당 줄에 디버그 중지 지점을 설정하고 변수를 분석했습니다. this._viewport.Width는 640이고 _realViewport.Width는 1280입니다. 따라서 계산기를 사용하면 640/1280이 0.5와 같아야하지만 내 코드에서는 항상 0.5가 아니라 0이됩니다. 왜이 일을하는거야?

답변

6

정수 나누기는 (XNA's Viewport 유형은 정수 너비 및 높이 속성을 가지며) 잘립니다. 따라서 640/1280은 0.5이며이 값은 0으로 잘립니다. 당신이 포인트 부문 부동하려는 경우 플로트에

캐스트하여 값 중 하나를 :

float _percent = _realViewport.Width/(float)this._viewport.Width; 
+0

오른쪽. 삼각 함수 계산을 할 때이 트릭을 많이 사용하게 될 것입니다. – user1306322

1

1.0 곱셈을 추가하여,이 float _percent = _realViewport.Width * 1.0/ (float)this._viewport.Width;을 시도, 정수가 자동으로 떠 변환됩니다.

+1

이것은 어떤 이유로 든 '1.0'으로 곱셈을 추가하고 아무 것도 설명하지 않았다는 것을 제외하고는 이전에 게시 된 답변과 같습니다. – user1306322

+0

@ user1306322, 대답을 수정했는데, 어떻게 하나입니까? –

+0

그것은 여전히 ​​기본적으로 동일합니다. 그리고이 작업에서 float로 변환 된 하나의 인수로 충분하기 때문에 여분의 연산을하고 있습니다. 코드를 더 명백하게하기 때문에 이전에 내가 개인적으로 선호하는 동일한 효과에'(float)'* 또는 * 1.0을 곱하여 캐스트 할 수있었습니다. – user1306322

관련 문제