让我的玩家精灵登陆我的平台精灵

时间:2011-03-08 04:20:21

标签: c# xna

在我的XNA游戏中(顺便提一下我对XNA来说还是比较新的)我希望让我的玩家精灵登陆平台。我有一个播放器精灵类,它继承自我的常规精灵类,以及常规的精灵类 基本的非可玩精灵,如盒子,背景材料和平台。但是,我不确定如何实现一种让我的玩家精灵在平台上着陆的方法。

我的玩家精灵可以跳跃和移动,但我不知道在哪里以及如何检查它是否在我的平台精灵之上。

我的播放器sprite跳转方法就在这里

 private void Jump()
    {

        if (mCurrentState != State.Jumping)
        {

            mCurrentState = State.Jumping;


            mStartingPosition = Position;

            mDirection.Y = MOVE_UP;

            mSpeed = new Vector2(jumpSpeed, jumpSpeed);

        }

    }

mStartingPosition是玩家精灵跳跃的起始位置,而位置是玩家精灵的当前位置。我认为我的代码用于检查我的播放器精灵是否在我的平台精灵之上。我不确定如何在playersprite类和jump方法内引用我的平台精灵。

我认为它应该是这样的

   //platformSprite.CollisonBox would be the rectangle around the platform, but im not 
    //sure how to check to see if player.Position is touching any point     
    //on platformSprite.CollisionBox
if(player.Position == platformSprite.CollisionBox)
    {
        player.mDirection = 0;

    }

再次对编程和XNA来说还是新手,有些逻辑我不太明白,所以对它的任何帮助都会非常感激:D

谢谢

4 个答案:

答案 0 :(得分:1)

如果player.Position是一个Point而CollisionBox是一个Rectangle,你可以使用

if (platformSprite.CollisionBox.Contains (player.Position))

答案 1 :(得分:1)

几天前,我正在玩这样的东西。 你叫什么叫CollisionBox我称之为BoundingBox。 BoundingBox是Rectangle,表示精灵占用的区域。

您可能会发现为精灵定义一个BoundingBox而不仅仅是使用它们的位置会很有帮助。

您可以使用以下代码轻松测试矩形的碰撞:

if (player.BoundingBox.Intersects(platform.BoundingBox)
{
    // handle collision here...
}

要使其正常工作,请确保BoundingBox的XY坐标正确反映您的精灵位置。

答案 2 :(得分:0)

您可能需要查看Platformer Starter Kit。它包括这个,以及探测玩家何时触碰敌人,收集宝石等等。

答案 3 :(得分:0)

关于BoundingBox的答案是正确的,但恕我直言,如果你正在制作一个2D游戏而不是BoundingBox,那么它更容易使用Rectangle,它是专为3D游戏设计的。

无论如何,两个对象都有交叉/碰撞测试方法,它们将Vector2或Point作为参数。

现在你必须为你的播放器提供一个盒子,并为你的平台提供一个盒子。如果一个人与另一个人发生碰撞,你必须从哪里检查(玩家可以从左上角向上,向下,向左,向右或向左和向左撞击平台)。

如果玩家位于平台顶部,那么可以通过将他的Y速度分量设置为0来停止他的跌倒。

也许你需要玩家在跳跃时通过平台(玩家从底部击中)而不是在跌倒时(玩家从顶部击中)。