玩家跳跃的问题

时间:2014-02-21 04:44:10

标签: c++ double codeblocks

我是一个新的程序员,有点做相对基本的东西。过去虽然(虽然我没有经常这样做),但在SDL的帮助下,我一直在制作2D游戏。现在,我正在研究导致玩家在按下w键时跳转的代码(控件是wsad)。我很快意识到我无法保持速度不变,因为这会导致跳转更像是y = - | x |的图形。比y = -x ^ 2,看起来更像是前者的实际跳跃。以下是使其有效的代码。

    //The part which happens when the jump key is pressed (w)
    case SDLK_w:
        if(InAir != true) {
            StartOfJump = PlayerYCoord;
            InAir = true;
            velocity = 0.01;
            break;
        }
    //And skip to a different part.
    if(InAir == true) {
      if(StartOfJump - PlayerYCoord < JumpHeight) {
        PlayerYCoord = PlayerYCoord - velocity;
        velocity = velocity * velocity;

速度是使得玩家的Y坐标增加的速度,以指数方式增加。现在,它在程序开始时设置为0.01。

JumpHeight是玩家跳跃的像素数。这是为了能够轻松地修改它。实际上,JumpHeight设置为100像素。

StartOfJump确保在正确的位置切断跳跃,因为目前游戏的地图是平的,我不希望保持这种状态。

PlayerYCoord相当不言自明,但基本上它是飞机上玩家的Y坐标。这是双重的。

是的,我知道现在没有堕落的代码。当我甚至无法获得上升部分时,这并不重要。

无论如何,我不确定为什么,但由于某种原因,在按下w键时,玩家的位置只增加了一个像素,而且它没有做任何其他事情。我尝试修改代码来说明这个

    if(InAir == true) {
      if(StartOfJump - PlayerYCoord < JumpHeight) {
        //PlayerYCoord = PlayerYCoord - 0.1;
        PlayerYCoord = PlayerYCoord - velocity;
        velocity = velocity * velocity;
        cout << fixed << setprecision(4);
        cout << "The velocity is" << velocity << " " << endl;

不幸的是,它开始打印0.0001然后永远打印0.000。但这不对,是吗?......速度的值是0.01 ......所以,我改变了最后一行来说:

     cout << "The velocity is" << velocity * 100 << " " << endl;

果然,输出0.0100然后像上次一样无限输出0.0000。老实说,我不确定是什么导致了这个问题,但我认为这与玩家的Y坐标只增加一个像素然后停止这一事实有关。

我可能犯了一个非常容易修复的愚蠢错误。无论如何,如果我需要包含任何其他代码(第一次在编程论坛上,我还没有把这些东西固定下来)我很乐意将它包括在内。在此先感谢您的帮助!

P.S。如果我的任何代码都依赖于系统,我使用的是Ubuntu 13.10,32位。

2 个答案:

答案 0 :(得分:0)

你没有错误地实施重力。你需要从向上的速度开始。然后,您需要在每个单位时间内减去重力的向下加速度。这将处理上升的下降。你的代码确实......奇怪的事情。

velocity = 50
each unit of time while player is in the air:
  playerY -= velocity
  velocity -= acceleration

答案 1 :(得分:0)

我不同意上述解决方案。

你的玩家应该总是受到引力的影响,对吧?即使我们在地面,我们也受到重力的影响?

总是通过重力影响玩家但是当我们按下一个左右的跳跃按钮时,添加反击力使玩家向上挥动(但只有一次),然后重力将消耗此力并推动玩家。

布尔值InAir应该只确定玩家是否可以再次跳跃。因此,如果我们在空中,我们就不能执行另一个跳转命令。但如果我们坚持(InAir = false )那么我们应该能够再次跳起来。

这也使得添加双跳等效率更高。

快乐的编码!