[SFML] Problem z wczytaniem czcionki.
Ostatnio zmodyfikowano 2014-12-01 19:21
marc_xxx Temat założony przez niniejszego użytkownika |
[SFML] Problem z wczytaniem czcionki. » 2014-11-25 20:50:52 Witam. Zacząłem pisać swoją pierwszą grę - kółko i krzyżyk. Przy, pozornie prostej, grze już na samym początku napotkałem problem. Grę piszę całkowicie spontanicznie, nie planując nic wcześniej - nie ustalam hierarchii klas itp. wiem, że to źle ale niby to prosty projekt. Dobra - wracając do tematu - na początku zacząłem tworzyć menu. W związku z tym stworzyłem klasę przycisku. Gdy ładuję czcionkę, jaka ma być wyświetlana na przycisku to jest napisane "Unable to create font face" w konsoli - program uruchamia się normalnie ale nic się nie wyświetla. Oto definicja mojej klasy Button - wiem, że tu jest chaos, ale zabrałem się za pisanie gry zupełnie spontanicznie: #ifndef BUTTON_H #define BUTTON_H
#include <SFML/Graphics.hpp> #include <SFML/Audio.hpp> #include <string> #include <iostream>
namespace ttt { class Button { public: Button( std::string title, unsigned int positionX, unsigned int positionY ); ~Button(); bool isPointerOnButton(); sf::Text & draw(); void setText( std::string fontFilename, sf::Color color, unsigned short textSize ); private: sf::Font font; sf::Text text; unsigned short sizeX; unsigned short sizeY; unsigned int positionX; unsigned int positionY; std::string title; }; }
#endif
Definicje funkcji: #include "button.h"
ttt::Button::Button( std::string fontFilename, unsigned int positionX, unsigned int positionY ) { title = title; this->positionX = positionX; this->positionY = positionY; if( !this->font.loadFromFile( fontFilename ) ) { std::cout << "Error loading font .. " << std::endl; } }
ttt::Button::~Button() { }
void ttt::Button::setText( std::string title, sf::Color color, unsigned short textSize ) { this->title = title; this->text.setFont( font ); this->text.setString( title ); this->text.setCharacterSize( textSize ); this->text.setPosition( this->positionX, this->positionY ); this->text.setColor( color ); }
sf::Text & ttt::Button::draw() { return this->text; }
|
|
unkn9wn |
» 2014-11-25 22:32:12 rzeczywiście chaos.
Nazwy argumentow przy definicji metody setText i konstruktorze roznia sie od tych przy deklaracjach |
|
NopeDotAvi |
» 2014-11-26 07:16:25 spróbuj fontFilename.c_str() podczas wczytywania czcionki |
|
kubawal |
» 2014-12-01 19:21:33 Taka jeszcze mała uwaga optymalizacyjna - lepiej użyć jakiegoś ResourceMenager'a, albo najlepiej Thor Resources ( http://www.bromeon.ch/libraries/thor/v2.0/tutorial-resources.htmlSzybszym sposobem jest użycie statycznego pointera do czcionki i ładowanie jej za wyłącznie pierwszym uzyciem. class Button { static void cleanUp() { if( font ) delete font; } Button( ) { if( !font ) { font = new sf::Font; font.loadFromFile( "myFont.ttf" ); } } private: static sf::Font * font = nullptr; }
Niestety minus tego jest taki, że nie ma za bardzo jak zastosować tu RAII. Tak więc, jak mówiłem, lepiej użyć Thor'a. |
|
« 1 » |