Игра «Мой понг» в C ++ получает предупреждение - PullRequest
1 голос
/ 24 сентября 2019

Итак, я создаю простую игру Pong с использованием c ++ и графической библиотеки SFML в Ubuntu 19.04, но когда я запускаю свою программу, кажется, что она работает нормально, примерно через 5 секунд, я получаю предупреждение о том, что моя программа не отвечаети выбор подождать или принудительно выйти из приложения.Когда я нажимаю «ждать», предупреждение уходит еще на 5 секунд, но возвращается.Как я могу предотвратить это или в моем коде что-то происходит?

  • Редактировать, мне нужно, чтобы это был ввод в реальном времени, иначе игра использует задержку повторения ключа.
  • Редактировать, Обнаружено pollEvent не должно быть условием для цикла while.Так что я положил его в основной цикл, это исправило это!
    #include <iostream>
    #include <SFML/Graphics.hpp>

    using namespace std;

        // init global variables

        int screenX = 1920, screenY = 1080; // Screen size

        int paddleWidth = 30, paddleHeight = 200; // Paddle size

        int orbWidth = 26, orbHeight = 26; // Orb size

        float objectLocations [6]  = // This is an array
        {
            /*paddleL_X_G*/ 0, /*paddleL_Y_G*/ 0,

            /*paddleR_X_G*/ 0, /*paddleR_Y_G*/ 0,

            /*orbL_X_G*/ 0, /*orbL_Y_G*/ 0
        };

        float speed = 1;

        // init window

        sf::RenderWindow window(sf::VideoMode(screenX, screenY), "SFML Tests!"); // Init window

        sf::Event event;

        // Defines all objects to be drawn on the screen
        class defineObjects
        {
            public:

            void leftPaddle(int paddleL_X, int paddleL_Y) // Define the leftPaddle
            {
                sf::RectangleShape paddleL(sf::Vector2f(paddleWidth,paddleHeight));

                paddleL.setFillColor(sf::Color::White);
                paddleL.setPosition(paddleL_X,paddleL_Y);

                window.draw(paddleL);
            }

            void rightPaddle(int paddleR_X, int paddleR_Y) // Define the rightPaddle
            {
                sf::RectangleShape paddleR(sf::Vector2f(paddleWidth,paddleHeight));

                paddleR.setFillColor(sf::Color::White);
                paddleR.setPosition(paddleR_X,paddleR_Y);

                window.draw(paddleR);
            }

            void orb(int orbX, int orbY)
            {
                int orbSize = 26;

                sf::RectangleShape orbShape(sf::Vector2f(orbSize,orbSize));

                orbShape.setFillColor(sf::Color::Red);
                orbShape.setPosition(orbX,orbY);

                window.draw(orbShape);
            }
        };

        class eventHandler
        {

        public:

            void input()
            {

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                {
                    window.close();
                }

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                {
                    objectLocations[3] -= speed;
                }

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
                {
                    objectLocations[3] += speed;
                }

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
                {
                    objectLocations[1] -= speed;
                }

                if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
                {
                    objectLocations[1] += speed;
                }

            }
        };


        int main()
        {
            // Get classes
            defineObjects O;
            eventHandler E;

            // inital object positions

            objectLocations[0] = paddleWidth; // paddleL_X

            objectLocations[1] = screenY / 2 - (paddleHeight / 2); // paddleL_Y

            objectLocations[2] = screenX - (paddleWidth * 2); // paddleR_X

            objectLocations[3] = screenY / 2 - (paddleHeight / 2); // paddleR_Y

            objectLocations[4] = screenX / 2 + (orbWidth / 2); // orbX

            objectLocations[5] = screenY / 2 - (orbHeight / 2); // orbY

            // Logic
            while(window.isOpen()) // Main loop
            {

                // Clear display
                window.clear();

                // Input
                E.input();

                // Update object locations
                O.leftPaddle(objectLocations[0],objectLocations[1]);

                O.rightPaddle(objectLocations[2],objectLocations[3]);

                O.orb(objectLocations[4],objectLocations[5]);
  #include <iostream>
#include <SFML/Graphics.hpp>

using namespace std;

    // init global variables

    int screenX = 1920, screenY = 1080; // Screen size

    int paddleWidth = 30, paddleHeight = 200; // Paddle size

    int orbWidth = 26, orbHeight = 26; // Orb size

    float objectLocations [6]  = // This is an array
    {
        /*paddleL_X_G*/ 0, /*paddleL_Y_G*/ 0,

        /*paddleR_X_G*/ 0, /*paddleR_Y_G*/ 0,

        /*orbL_X_G*/ 0, /*orbL_Y_G*/ 0
    };

    float speed = 1;

    // init window

    sf::RenderWindow window(sf::VideoMode(screenX, screenY), "SFML Tests!"); // Init window

    sf::Event event;

    // Defines all objects to be drawn on the screen
    class defineObjects
    {
        public:

        void leftPaddle(int paddleL_X, int paddleL_Y) // Define the leftPaddle
        {
            sf::RectangleShape paddleL(sf::Vector2f(paddleWidth,paddleHeight));

            paddleL.setFillColor(sf::Color::White);
            paddleL.setPosition(paddleL_X,paddleL_Y);

            window.draw(paddleL);
        }

        void rightPaddle(int paddleR_X, int paddleR_Y) // Define the rightPaddle
        {
            sf::RectangleShape paddleR(sf::Vector2f(paddleWidth,paddleHeight));

            paddleR.setFillColor(sf::Color::White);
            paddleR.setPosition(paddleR_X,paddleR_Y);

            window.draw(paddleR);
        }

        void orb(int orbX, int orbY)
        {
            int orbSize = 26;

            sf::RectangleShape orbShape(sf::Vector2f(orbSize,orbSize));

            orbShape.setFillColor(sf::Color::Red);
            orbShape.setPosition(orbX,orbY);

            window.draw(orbShape);
        }
    };

    class eventHandler
    {

    public:

        void input()
        {

            if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
            {
                window.close();
            }

            if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            {
                objectLocations[3] -= speed;
            }

            if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            {
                objectLocations[3] += speed;
            }

            if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
            {
                objectLocations[1] -= speed;
            }

            if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
            {
                objectLocations[1] += speed;
            }

        }
    };


    int main()
    {
        // Get classes
        defineObjects O;
        eventHandler E;

        // inital object positions

        objectLocations[0] = paddleWidth; // paddleL_X

        objectLocations[1] = screenY / 2 - (paddleHeight / 2); // paddleL_Y

        objectLocations[2] = screenX - (paddleWidth * 2); // paddleR_X

        objectLocations[3] = screenY / 2 - (paddleHeight / 2); // paddleR_Y

        objectLocations[4] = screenX / 2 + (orbWidth / 2); // orbX

        objectLocations[5] = screenY / 2 - (orbHeight / 2); // orbY

        // Logic
        while(window.isOpen()) // Main loop
        {

            // Clear display
            window.clear();

            // Input
            E.input();

            // Update object locations
            O.leftPaddle(objectLocations[0],objectLocations[1]);

            O.rightPaddle(objectLocations[2],objectLocations[3]);

            O.orb(objectLocations[4],objectLocations[5]);

            // Show display
            window.display();

        }

        return 0;

    }

...