绘制sf ::文本的麻烦.C

Trouble with drawing sf::Text. C++

本文关键字:麻烦 文本 sf 绘制      更新时间:2023-10-16


我在sf::Textsf::Font方面遇到了麻烦。文本不想绘制。std::wstring具有正确的文本值。sf::Font负载完美。这是我的代码:

sf::Font mainGameFont;
void drawText( const std::wstring& str, const int size, const float xposition, const float yposition, sf::RenderWindow& window, const sf::Font& mainGameFont )
{
    std::wcout << str << std::endl;
    source.setFont( mainGameFont );
    source.setColor( color );
    source.setCharacterSize( size );
    source.setString( str );
    source.setPosition( xposition, yposition );
    window.draw(source);
}
int main()
{
    sf::RenderWindow window(sf::VideoMode(1024, 768), "test");
    mainGameFont.loadFromFile("futura.ttf");
    ...
    //Other code, calling drawText(...), etc
    ...
}

有人可以帮我吗?对不起,我的英语不好。

更新:此代码不起作用!

#include <string>
#include <iostream>
#include "SFML/Graphics.hpp"
sf::Font mainGameFont;
sf::Text source;
void drawText( const std::wstring& str, const int size, const float xposition, const float yposition, sf::RenderWindow& window, sf::Font& mainGameFont )
{
    mainGameFont.loadFromFile("futura.ttf");
    std::wcout << str << std::endl;
    source.setFont( mainGameFont );
    source.setColor( sf::Color::White );
    source.setCharacterSize( size );
    std::cout << "stat1" << std::endl;
    source.setString( str );
    source.setPosition( xposition, yposition );
    window.draw(source);
    std::cout << "ok" << std::endl;
}
int main()
{
    sf::RenderWindow window(sf::VideoMode(600, 400), "Test");
    while (window.isOpen())
    {
        window.clear(sf::Color::Black);
        drawText(L"Ok", 20, 90, 90, window, mainGameFont);
        window.display();
    }
        return 0;
}

好吧,首先,您对不良编程惯例的整个代码:

您声明:

sf::Font mainGameFont;
sf::Text source;

作为全球群体,但随后使用函数中的变量完全相同的名称违反了阴影规则:

void drawText( const std::wstring& str, const int size, const float xposition, const float yposition, sf::RenderWindow& window, sf::Font& mainGameFont )

主要通过重新支撑:

sf::Font& mainGameFont

然后,您会通过函数已经看到的全局变量来传递……作为对函数的引用:

drawText(L"Ok", 20, 90, 90, window, mainGameFont);

您还错误地使用了保留的关键字'size':

source.setCharacterSize( size );

您无法使用。

的名称
#include <string>
#include <iostream>
#include <SFML/Graphics.hpp>
sf::Text source;
sf::Font mainGameFont;
void drawText( const sf::String &str, const int Size, const float xposition, const float yposition, sf::RenderWindow& window)
{
    source.setString(str);
    source.setCharacterSize(Size); //only the lower cased word size is reserved. A capital S fixes that.
    source.setPosition(xposition,yposition);
    window.draw(source);
}
int main()
{
    sf::RenderWindow window(sf::VideoMode(600, 400), "Test");
    //This should only be called ONCE, not at every pass.
    mainGameFont.loadFromFile("futura.ttf");
    source.setFont(mainGameFont);
    while (window.isOpen())
    {
        window.clear(sf::Color::Black);
        drawText("Ok", 20, 90, 90, window);
        window.display();
    }
    return 0;
}

重写工作。