双跳的问题

Issue with double jumping

本文关键字:问题      更新时间:2023-10-16

我真的不知所措。我一直坐在电脑前,试图弄清楚为什么这不起作用。我正在尝试禁用玩家在空中跳跃的能力。但是由于某种原因,玩家仍然可以双跳,同时如果玩家尝试第三次或第四次跳跃等等。它不会,我的代码有效。但是为什么我还能跳双跳呢?我想不通。感谢所有帮助。

#include "pch.h"
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
using namespace std;
int width = 800;
int height = 600;
int main()
{
    sf::RenderWindow window(sf::VideoMode(width, height), "In Development");
    window.setFramerateLimit(70);
    window.setVerticalSyncEnabled(true);
    sf::RectangleShape player;
    player.setSize(sf::Vector2f(50, 50));
    player.setFillColor(sf::Color::Cyan);
    player.setPosition(width / 2, 0);
    sf::Vector2f velocity(0, 0);
    float gravity = .1;
    bool jumping = true;
    sf::Event event;
    while (window.isOpen())
    {
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
            if (event.type == sf::Event::KeyPressed)
            {
                if (event.key.code == sf::Keyboard::Space)
                {
                    if (jumping == false)
                    {
                        velocity.y = -3.5;
                        jumping = true;
                    }
                }
            }
        }
        //Gravity
        if (player.getPosition().y < height / 2)
        {
            velocity.y += gravity;
        }
        else if (player.getPosition().y >= height / 2)
        {
            player.setPosition(player.getPosition().x, height / 2);
            jumping = false;
        }
        //Move the player
        player.move(velocity);
        window.clear(sf::Color::White); //Clear
        window.draw(player);
        window.display(); //Display
    }
    int pause; cin >> pause; //Pause the program
    return 0;
}

这可能是也可能不是这个问题的合适位置。 (也许 gamedev.stackexchange.com?

然而,在我看来,你的问题是你做事的顺序。在重力部分的"else if"中,如果您的玩家已到达某个垂直位置,您将jumping设置回 false。 但是,您只是在代码的后面移动播放器。 因此,当玩家跳跃时,jumping被设置为 true,但随后立即再次设置为 false,因为他们还没有移动(他们还在地上(。

将垂直位置的检查放在player.move()之后。