2017-03-09 1 views
0

(읽기 전에, 이전 질문에 많은 부정적인 반응이있어 매우 불안합니다. "Perfect"code yet)XNA 매끄러운 아래쪽으로 스눕 동작

나는 현재 모기 (Texture2D)를 아래쪽으로 밀어 올린 다음 원래의 위치로 되돌아 오는 방법을 알아 내려고 노력 중이다. 현재 모기는 화면 이동 범위 내에서 좌우로 움직이며 Y 이동은 없습니다.

나는 디버거를 거쳐 Y 좌표를 관찰했다. 내 모기가 실제로 다시 위로 스며 들고 다시 위로 올라옵니다. 그러나 그들은 그렇게 빨리 일어나서 육안으로 볼 수 없습니다.

따라서 실제로 볼 수 있도록 원활하게 스 내핑 할 방법이 필요합니다. 현재 내 게시물에 이미지를 포함 할 수 없지만 원하는 효과를 나타내는 GIF를 만들었습니다. Here's a link to my GIF

상황은 나는 시도했다 :

  • 내 이동 코드 (아래 본)의 첫 번째 줄을 복사하고 그것은 단지 Y 좌표에 영향을 줄 수 있도록 변경.
    • 결과 : 모기가 여전히 너무 빠르게 급상승했습니다.
  • 내 모기의 velocity.Y를 변경하여 0이 아닌 Y를 포함 시키면 운동 코드가 X 위치가 아닌 Y 위치도 변경합니다.
    • 결과 : 게임은 ...
    • 내 이동 코드가 업데이트() 함수에서 발견되기 때문에 무한 루프에 갇혀, 그것은 위치를 업데이트 할 수 있도록 코드는 루프에서 나왔을되지 않았다

내 업데이트에있는 동작 코드는 다음과 같습니다. 모기가 오른쪽으로 이동 한 후 왼쪽으로 이동합니다.

 internal void Update(GameTime GameTime) 
     { 
      position += velocity * (float)GameTime.ElapsedGameTime.TotalSeconds; 

      // Reverses the direction of the mosquito if it hits the bounds 
      if (position.X <= gameBoundingBox.Left || 
       position.X + animationSequence.CelWidth > gameBoundingBox.Right) 
      { 
       velocity.X *= -1; 
      } 
     } 

그리고 여기 내가 너무 자주 여기에 질문을하지 않는 내가 가지고있는 실제 급습() 코드 ...

internal void Swoop(GameTime gameTime) 
    { 
     float originalYPosition = position.Y; 
     bool currentlySwooping = true; 

     while (currentlySwooping) 
     { 
      position.Y++; 

      if (this.BoundingBox.Bottom >= gameBoundingBox.Bottom) 
      { 
       currentlySwooping = false; 
      } 
     } 

     while (!currentlySwooping && position.Y > originalYPosition) 
     { 
      position.Y--; 
     } 
    } 

을, 그래서 나는 내가 사용하고 있다면 미안 해요 잘못된 형식 또는 너무 적은 정보를주었습니다. 다른 것을 알고 싶으면 알려주십시오.

+0

어디에서 '급습'이라고 부릅니까? – Pipe

+0

내 주요 게임 코드 (MosquitoAttackGame.cs). 특정 번호가 생성되면 swoop 메서드를 호출하는 난수 생성기가 있습니다. 저는 아직 학교에 다니고 있기 때문에 아직 해결책을 찾지 못했습니다. 그러나 내가 집에 갈 때 나는 그것을 시험해 볼 것이다 :) –

답변

0

구현 방법에는 여러 가지가 있지만 이렇게해야합니다. (올라가고 내려가는 경우 때 1 -1)

float originalYPosition = position.Y; 
int swoopDirection = 0; 
internal void Update(GameTime GameTime) 
{ 
    /* Same update code */ 

    if (swoopDirection != 0) 
    { 
     position.Y += swoopDirection; 

     if (swoopDirection == 1 && this.BoundingBox.Bottom >= gameBoundingBox.Bottom) 
     { 
      swoopDirection = -1; 
     } 
     else if (swoopDirection == -1 && position.Y <= originalYPosition) 
     { 
      swoopDirection = 0; 
     } 
    } 
} 
internal void Swoop() 
{ 
    swoopDirection = 1; 
} 

기본적으로 우리는 가변 급습의 상태에 따라 변경 swoopDirection있다. 업데이트 방법에서 우리는 swoopDirection != 0 (weo swooping)을 체크합니다. 우리가 급습하는 경우 Y 축에 방향을 추가하고 우리가 범위를 벗어나지 않았는지 확인하십시오. 바닥에 닿으면 우리는 swoopDirection을 -1로 설정합니다. 우리가 원래 위치에 있다면 swoopDirection은 0으로 설정되고 급습을 멈 춥니 다.

+0

고맙다! 내 게임에서 작동 할 수 있도록 코드를 수정하고 수정해야했지만 전체적으로 메소드가 작동했습니다! :) 다시 한번 감사드립니다! –

+0

여러분을 환영합니다! – Pipe