下降和xna上的碰撞

下降和xna上的碰撞

问题描述:

即时制作平台类型的游戏。我使用Rectangle类和平台使我的主角成为了一个矩形。平台在屏幕上不停地向上移动,当我的角色与平台顶部碰撞时,我希望他以与平台相同的速度着陆和移动,否则,他应该下降。除了下降的部分,我得到了一切工作。如果我打开坠落,它永远不会停留在平台上,但如果我打开坠落,它可以正常工作。基本上这个角色假设在整个时间都在下降,除非它落在平台上,那么它的y方向/速度应该改变为平台的方向/速度。下降和xna上的碰撞

这里是代码的一部分,任何关于如何在不与平台碰撞的情况下使角色掉下来的帮助会很大。如果我想知道更好的方法,我知道我在做什么可能不是最有效的方法。我是新来的XNA,但我知道的Java/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; 
      } 

你的问题是最有可能的,你是不是断开回路的输出,当你打一个交集。你每次都在所有的平台上循环,所以当一个相交时,重力会= 0,但是然后猜测它会检查下一个,重力会再次变为5。

你必须调整你的循环或者你可以看看这个2D物理引擎来处理大部分的这些东西对你:

http://farseerphysics.codeplex.com/

+0

谢谢!我不能相信我错过了这一点。我重组了循环和一切来解决这个问题。我打算使用物理引擎,但这是一个非常简单的游戏,更适合练习。 – user566417 2011-12-24 07:00:13

微软有一个Platformer sample已在下降,科里森。这是一个很好的示例,您不需要任何第三方物理引擎就可以为您做到这一点。