2011-12-24 3 views
0

메신저 플랫폼 유형의 게임 만들기. Rectangle 클래스뿐만 아니라 플랫폼을 사용하여 주인공을 사각형으로 만들었습니다. 플랫폼은 화면에서 지속적으로 위쪽으로 움직이며, 캐릭터가 플랫폼의 상단과 충돌 할 때 플랫폼과 동일한 속도로 착륙하고 움직여야합니다. 그렇지 않으면 그는 떨어지고 있어야합니다. 나는 떨어지는 부분을 제외하고는 일할 모든 것을 얻었습니다. 내가 떨어지는 것을 켜면, 그것은 플랫폼에 머무를 수 없지만, 내가 떨어질 때 켜면 잘 동작합니다. 기본적으로 캐릭터는 플랫폼에 착륙하지 않는 한 전체 시간 동안 떨어지는 것으로 가정하고 y 방향/속도는 플랫폼의 속도로 변경해야합니다.xna에서 낙하 및 충돌

여기에 코드의 일부가 있습니다. 플랫폼과 충돌하지 않을 때마다 문자를 떨어 뜨리는 방법에 대한 도움이 될 것입니다. 내가 아는 것이 더 좋은 방법이 있다면, 내가하고있는 일이 가장 효과적인 방법이 아닐지도 모른다. 나는 XNA에 새로운 해요,하지만 난 자바/C#을

  Rectangle playerRec = new Rectangle((int)player.position.X, (int)player.position.Y,player.width, player.height); 
     foreach (Platforms platform in platforms) 
     { 
      Rectangle platformRec = new Rectangle((int)platform.position.X, (int)platform.position.Y, platform.width, platform.height); 
      if ((playerRec.Intersects(platformRec) && (playerRec.Y + playerRec.Height) - platformSpeed < platformRec.Y) && 
       (playerRec.X < platformRec.X + platformRec.Width && playerRec.X + playerRec.Width > platformRec.X)) 
      { 
       gravity = 0; 
       player.position.Y -= platformSpeed; 

      } 
      else if(player.position.Y != platform.position.Y) 
      { 
       gravity = 5; 
       //player.position.Y += gravity; 
      } 

답변

3

귀하의 문제가 교차로에 충돌 할 때 루프의 돌발되지 않습니다 가능성이 높습니다 알고있다. 당신은 모든 플랫폼을 반복 할 때마다 하나가 교차 할 때, 중력은 0이 될 것이지만 그 다음에 무엇을 확인하고 중력은 다시 5가 될 것입니다.

당신은 당신의 루프를 재구성해야 할 것이다 또는 당신은 당신을 위해이 물건의 대부분을 처리 할 수있는이 2D 물리 엔진을 확인할 수 있습니다 :

http://farseerphysics.codeplex.com/

+0

감사! 나는 그것을 놓쳤다는 것을 믿을 수 없다. 루프를 수정하여 모든 문제를 해결했습니다. 나는 물리 엔진을 사용할 예정 이었지만, 이것은 매우 간단한 게임이며 연습을위한 것입니다. – user566417

0

마이크로 소프트에서 떨어지는 콜리슨 한 Platformer sample 있습니다. 이 샘플은 훌륭한 학습 자료이며,이를 위해 타사 물리 엔진이 필요하지 않습니다.