스프라이트를 회전시키는 데 사용되는 Xbox 썸 스틱, 기본 공식은 90도 간격으로 "고정"또는 "고정"느낌을줍니다! 부드럽게 회전하는 방법은 무엇입니까?


9

Xbox 컨트롤러 썸 스틱을 기준으로 스프라이트 (예 : 우주선)가 향하는 각도를 계산하기 위해 매우 기본적인 공식을 사용하고 있습니다. 즉, 썸 스틱을 사용하여 선박을 회전시킵니다.

내 주요 업데이트 방법에서 :

shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);

내 주요 추첨 방법에서 :

spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);

보시다시피 썸 스틱에서 현재 라디안을 가져 와서 플로트에 저장 shuttleAngle한 다음 셔틀을 그리기위한 회전 각도 (라디안) 인수로 사용합니다.

어떤 이유로 스프린트를 돌리면 0, 90, 180 및 270도 각도에서 끈적 거리게 느껴집니다. 그것은 그 각도로 정착하고 싶습니다. 비슷한 메커니즘을 사용하는 게임에서 느끼는 것처럼 부드럽고 자연스럽게 회전하지 않습니다. PS : Xbox 컨트롤러가 정상입니다!


1
Atan2가 Y 값을 먼저 사용한 다음 X 값을 사용하지 않습니까? msdn.microsoft.com/en-us/library/system.math.atan2.aspx . x와 y 값을 먼저 바꿔야합니다. 보간법으로 값을 완화하는 것을 고려 했습니까? toValue-currentValue / 속도
Sidar

죄송하지만 newShuttleAngle-oldShuttleAngle / 속도를 의미했습니다.
Sidar

그것은 시각적 인 방향에만 영향을 미치며 텍스처의 이미지 방향이 전적으로 어떤지에 달려 있습니다. 그의 문제에 영향을 미친다는 것을 알 수 없습니다.
Joe Shanahan

이거 윈도우 야? 그렇다면 프로젝트가 콘솔 창 (프로젝트-> 프로젝트 옵션-> 응용 프로그램-> 출력 유형)을 사용하도록 설정하고 각도 shuttleAngle를 인쇄하여 해당 각도에 고정되는지 확인하십시오.
Joe Shanahan

2
와우 훌륭한 직업 SomeWritesReserved와 다른 모든 사람, 나는이 사이트에 정말 감동합니다, 피드백은 너무 빠릅니다! 내 첫 번째 게시물이므로 누군가 도와 준 모든 사람들에게 크레딧을 제공하기 위해 어떻게해야하는지 알려주십시오.
Hugh

답변:


18

게임 패드의 데드 존 작동 방식 때문일 수 있습니다. 기본값은 GamePadDeadZone.IndependentAxes입니다. 즉, 각 축이 데드 존에 대해 개별적으로 검사됩니다. 이로 인해 입력이 아날로그 썸 스틱의 각 축에 스냅되는 경향이 있습니다. 대신 다음을 사용하십시오 GamePadDeadZone.Circular.

newGamePadState = GamePad.GetState(playerIndex, GamePadDeadZone.Circular);

이렇게하면 두 축을 훨씬 부드럽게 제어 할 수 있습니다. 아웃 확인 MSDN 페이지숀 하그리브스으로이 기사를 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.