从(整数到字符串)显示为点的文本的 SFML 转换

问题描述 投票:0回答:1
#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>

using namespace std;

struct patrat {
    long double greutate; //mass
    sf::RectangleShape shape;
    long double viteza; //velocity
}patrat1,patrat2;

int main()
{
    
    patrat1.greutate = 1000000000000.0f; //10^12 = 3141430
    patrat1.shape.setSize(sf::Vector2f(200.0, 200.0));
    patrat1.shape.setFillColor(sf::Color::Blue);
    patrat1.shape.setPosition(500.0f, 250.0f);
    patrat1.viteza = -0.1f;

    patrat2.greutate = 1.0f;
    patrat2.shape.setSize(sf::Vector2f(100.0f, 100.0f));
    patrat2.shape.setFillColor(sf::Color::Red);
    patrat2.shape.setPosition(200.0f, 350.0f);
    patrat2.viteza = 0.0f;


    sf::RectangleShape shape(sf::Vector2f(200, 200));
    shape.setPosition(150.0f, 250.0f);
    shape.setFillColor(sf::Color::Blue);

    sf::RectangleShape shape1(sf::Vector2f(100, 100));
    shape1.setPosition(50.0f, 350.0f);
    shape1.setFillColor(sf::Color::Red);

    sf::Font font;
    if (!font.loadFromFile("C:\\Users\\hsvdg\\Documents\\MathicsRoundFree.ttf"))
        std::cout << "Failed to load font. Make sure the font file is in the correct directory." << std::endl;
    sf::Text text;
    text.setFont(font);
    text.setPosition(700, 10);
    text.setFillColor(sf::Color::White);
    text.setCharacterSize(24);
    text.setString(std::to_string(0));

    sf::RenderWindow window(sf::VideoMode(900, 500), "PI");

    sf::RectangleShape lineV(sf::Vector2f(5, 500));
    lineV.setPosition(50, 0);
    lineV.setFillColor(sf::Color::White);

    sf::RectangleShape lineH(sf::Vector2f(900, 5));
    lineH.setPosition(0, 450);
    lineH.setFillColor(sf::Color::White);


    int pi = 0;
    long double dt, fps = 700.0;  
    window.setFramerateLimit(fps);
    dt = 1 / fps;
    long double sem;

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();

        if(patrat1.shape.getPosition().x<=150) window.draw(shape);//remove the overlapping of the squares
        else window.draw(patrat1.shape);
        if (patrat2.shape.getPosition().x <= 50) window.draw(shape1);
        else window.draw(patrat2.shape);
        
        window.draw(lineV);
        window.draw(lineH);
        window.draw(text); //draw the pi text
        window.display();

        for (int i = 0; i <= 1000; i++) { //attempted optimization where for each drawn frame velocities and positions are updated 1k times
            if (patrat1.shape.getPosition().x <= patrat2.shape.getPosition().x + 100 && patrat2.viteza >= 0) {
                sem = patrat1.viteza;
                patrat1.viteza = (patrat1.greutate - patrat2.greutate) / (patrat1.greutate + patrat2.greutate) *sem + (2 * patrat2.greutate) / (patrat1.greutate + patrat2.greutate) * patrat2.viteza;

                patrat2.viteza = (2 * patrat1.greutate) / (patrat1.greutate + patrat2.greutate) *sem + (patrat2.greutate - patrat1.greutate) / (patrat1.greutate + patrat2.greutate) * patrat2.viteza;
                pi++;
            }
            else if (patrat2.shape.getPosition().x <= 50 && patrat2.viteza < 0) {
                patrat2.viteza *= -1;
                pi++;
            }

            patrat1.shape.move(patrat1.viteza*dt, 0);
            patrat2.shape.move(patrat2.viteza*dt, 0);
        }

    }
    std::cout << pi;
    text.setString(std::to_string(pi)); //set text to pi


    return 0;
};

我期望 pi 显示在窗口的右上角。 即使字体加载没有任何问题并且我使用的是 C++17,文本仍然显示为点。我该如何解决它?

c++ string sfml
1个回答
0
投票

我认为这仍然是字体的问题,因为我运行了你的代码,并且屏幕上也只有一个点,但是当我用

“C:/Windows/Fonts/ariali.ttf”
替换你的路径时,它通常会画一个零,以及我想要的所有其他文本如果使用过
setString()

© www.soinside.com 2019 - 2024. All rights reserved.