gpt4 book ai didi

c# - 跳跃比。重力

转载 作者:太空狗 更新时间:2023-10-29 22:53:56 29 4
gpt4 key购买 nike

我正在开发我的第一个 XNA 2D 游戏,但遇到了一个小问题。如果我跳,我的 Sprite 会跳但不会倒下。我还有另一个问题,用户可以按住 spacebar 跳到他想要的高度,我不知道如何阻止他这样做。这是我的代码:跳跃:

    if (FaKeyboard.IsKeyDown(Keys.Space))
{
Jumping = true;
xPosition -= new Vector2(0, 5);
}

if (xPosition.Y >= 10)
{
Jumping = false;
Grounded = false;
}

真正简单的基本重力:

    if (!Grounded && !Jumping)
{
xPosition += new Vector2(1, 3) * speed;
}

这里是 grounded 设置为 True 或 False with a Collision

    Rectangle MegamanRectangle = new Rectangle((int)xPosition.X, (int)xPosition.Y, FrameSizeDraw.X, FrameSizeDraw.Y);
Rectangle Block1Rectangle = new Rectangle((int)0, (int)73, Block1.Width, Block1.Height);
Rectangle Block2Rectangle = new Rectangle((int)500, (int)73, Block2.Width, Block2.Height);

if ((MegamanRectangle.Intersects(Block1Rectangle) || (MegamanRectangle.Intersects(Block2Rectangle))))
{
Grounded = true;
}
else
{
Grounded = false;
}

grounded bool 和 The gravity 已经过测试并且可以正常工作。任何想法为什么?在此先感谢您,请随时询问您是否需要代码的另一部分。

最佳答案

处理跳跃的一种相对简单的方法是将重力实现为矢量并将跳跃/移动实现为冲量。

例如:

foreach (Object obj in GameWorld)
{
obj.Velocity *= 0.5; // Slow it down slightly
obj.Velocity += GravityPerSecond * FrameTime; // Gravity adjusted for time
obj.Move(obj.Velocity); // Handle collision and movement here
}

速度应该是一个与世界维度相同的向量,Move 方法在给定的向量中尽可能远地移动对象。

跳转代码:

OnKeyDown(Key k)
{
if (k == Key.Space)
{
obj.Velocity += Vector2(0, 10); // Add an upward impulse
}
}

这将使物体向上移动一点,然后开始下落。您可以将类似的脉冲用于其他效果(移动、爆炸、碰撞)。当两个物体碰撞时,您需要让碰撞修改速度,以便弹跳。

这是一个极其简单的物理系统,它将使 future 的改变变得更加简单,并且可以允许进行一些有趣的关卡设计(改变重力等)。它通过将复杂的 IsJumping 代码抽象为单一机制来简化处理跳跃。

为了防止在没有站在物体上的情况下跳跃,您需要进行碰撞测试,或者在物体向下碰撞/停止碰撞时进行跟踪。也可以检查对象的垂直速度是否为零,然后才允许跳跃(防止在下降或向上移动时跳跃)。

关于c# - 跳跃比。重力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8336246/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com