SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Не отображает текст. Ошибка сегментирования.
В этой теме 3 ответа, 2 участника, последнее обновление ReRand0m 8 года/лет назад.
-
АвторСообщения
-
Ничего не понимаю, в общем вот код:
Конструктор:
C++1234567891011controlPanel::controlPanel(sf::Vector2i s, sf::RenderWindow* w, sf::Vector2i pos){size = s;window = w;if(!texture.loadFromFile("textures/panel-background.png"))std::cout << "error in file " << __FILE__ << " on line " << __LINE__ << std::endl;position = pos;if(!font.loadFromFile("textures/arial.ttf"))std::cout << "error in file " << __FILE__ << " on line " << __LINE__ << std::endl;addText();}addText:
C++123456789void controlPanel::addText(){sf::Text text;text.setFont(font);text.setCharacterSize(22);text.setString("TEST");text.setColor(sf::Color::White);texts.push_back(text);}update:
C++123456789101112131415void controlPanel::update(){sprite.setTexture(texture);sprite.setPosition(position.x, position.y);sprite.setScale(size.x, size.y);window->draw(sprite);int i;std::cout << (std::string) texts[0].getString() << std::endl;/*for(i = 0; i < texts.size(); i++){window->draw(texts[i]);}*/window->draw(texts[0]); //ошибка сегментирования}Последняя строка в update выдаёт ошибку. Но, если addText вызвать в update то всё нормально, за исключением миллиона текстов))
Я так подозреваю что вы использовали std::vector<type>. Текст который создается в addText он локален для этого метода то – есть не виден ни самому классу ни его методам. Я не знаю что происходит в таком случае тем более метод вызван в конструкторе самого класса. У текста отсутствует позиция на экране.
Если у вас в коде конструктора такие отступы а вернее их отсутствие может и вызвать такую ошибку потому что :
if(!font.loadFromFile(“textures/arial.ttf”))
std::cout << “error in file ” << __FILE__ << ” on line ” << __LINE__ << std::endl;
addText();
Здесь метод addText стоит на else. Может в этом проблема.Проблема решилась, когда
C++1*.setFont(font);вынес за пределы конструктора.
Теперь в update() один раз вызывается:
C++12345678void setFont(){int i;for(i = 0; i < texts.size()-1; i++){texts[i].setFont(font);}}Решение не самое лучшее, может кто знает более лаконичное?
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.