【问题标题】:falling and collisions on xna在 xna 上坠落和碰撞
【发布时间】:2011-12-24 05:36:56
【问题描述】:

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

这是代码的那部分,任何关于如何让角色在不与平台发生碰撞时跌倒的帮助都会很棒。我知道我在做什么可能不是最有效的方法,如果有更好的方法我很想知道。我是 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;
            }

【问题讨论】:

    标签: c# xna collision gravity


    【解决方案1】:

    您的问题很可能是您在遇到交叉路口时没有跳出环路。您每次都在遍历所有平台,因此当一个平台相交时,重力将 = 0,但猜猜看,它会检查下一个平台,重力将再次为 5。

    你必须重新构建你的循环,或者你可以查看这个 2D 物理引擎来为你处理大部分这些东西:

    http://farseerphysics.codeplex.com/

    【讨论】:

    • 谢谢!我不敢相信我错过了。我重组了循环和一切来解决这个问题。我打算使用物理引擎,但这是一个非常简单的游戏,更多的是为了练习。
    【解决方案2】:

    Microsoft 有一个 Platformer sample,它已经坠落和碰撞。这是一个很好的学习示例,您不需要任何第三方物理引擎来为您执行此操作。

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多