未处理的异常...堆栈溢出

问题描述 投票:0回答:0

我正在学习 SFML。我正在尝试使用“SFML 游戏开发”中的代码运行一个非常基本的 SFML 程序,但我有一个错误:

在 test-sfml.exe 中的 0x799BEA64 (sfml-window-d-2.dll) 抛出异常:0xC00000FD:堆栈溢出(参数:0x00000001)

环境是Microsoft Visual Studio 2022.

这是我的档案:

游戏.h

#pragma once
#include <SFML/Graphics.hpp>

class Game
{
public:
    Game();
    void run();
private:
    void processEvents();
    void update(sf::Time deltaTime);
    void render();
    void handlePlayerInput(sf::Keyboard::Key key, bool isPressed);
private:
    bool mIsMovingUp, mIsMovingDown, mIsMovingRight, mIsMovingLeft;
    float PlayerSpeed = 1.0f;
    sf::Time TimePerFrame = sf::seconds(1.f / 60.f);
    sf::RenderWindow mWindow;
    sf::CircleShape mPlayer;
};

游戏.cpp

#include "Game.h"

Game::Game(): mWindow(sf::VideoMode(640, 480), "SFML Application")
, mPlayer()
, mIsMovingUp(false)
, mIsMovingDown(false)
, mIsMovingRight(false)
, mIsMovingLeft(false)
{
    mPlayer.setRadius(40.f);
    mPlayer.setPosition(100.f, 100.f);
    mPlayer.setFillColor(sf::Color::Cyan);
}
void Game::run()
{
    sf::Clock clock;
    sf::Time timeSinceLastUpdate = sf::Time::Zero;
    while (mWindow.isOpen())
    {
        processEvents();
        timeSinceLastUpdate += clock.restart();
        while (timeSinceLastUpdate > TimePerFrame)
        {
            timeSinceLastUpdate -= TimePerFrame;
            processEvents();
            update(TimePerFrame);
        }
        render();
    }
}

void Game::processEvents()
{
    sf::Event event;
    while (mWindow.pollEvent(event))
    {
        switch (event.type)
        {
            case sf::Event::KeyPressed:
                handlePlayerInput(event.key.code, true);
                break;
            case sf::Event::KeyReleased:
                handlePlayerInput(event.key.code, false);
                break;
            case sf::Event::Closed:
                mWindow.close();
                break;
        }
    }
}

void Game::update(sf::Time deltaTime)
{
    sf::Vector2f movement(0.f, 0.f);
    if (mIsMovingUp)
        movement.y -= PlayerSpeed;
    if (mIsMovingDown)
        movement.y += PlayerSpeed;
    if (mIsMovingLeft)
        movement.x -= PlayerSpeed;
    if (mIsMovingRight)
        movement.x += PlayerSpeed;
    mPlayer.move(movement * deltaTime.asSeconds());
}


void Game::render()
{
    sf::Clock clock;
    while (mWindow.isOpen())
    {
        sf::Time deltaTime = clock.restart();
        processEvents();
        update(deltaTime);
        render();
    }
}

void Game::handlePlayerInput(sf::Keyboard::Key key, bool isPressed)
{
    if (key == sf::Keyboard::W)
        mIsMovingUp = isPressed;
    else if (key == sf::Keyboard::S)
        mIsMovingDown = isPressed;
    else if (key == sf::Keyboard::A)
        mIsMovingLeft = isPressed;
    else if (key == sf::Keyboard::D)
        mIsMovingRight = isPressed;
}

main.cpp

#include "Game.h"
int main()
{
    Game game;
    game.run();

}
c++ sfml
© www.soinside.com 2019 - 2024. All rights reserved.