Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SFML - Set font

Ostatnio zmodyfikowano 2016-12-11 22:30
Autor Wiadomość
Warmix
Temat założony przez niniejszego użytkownika
SFML - Set font
» 2016-12-10 21:51:11
Cześć, dlaczego nie mogę zrobić czegoś takiego:

C/C++
font.loadFromFile( "arial.ttf" );
tekst.setFont( font );
tekst.setString( "Tekst1" );
//inne ustawienia napisu

font.loadFromFile( "kust.ttf" );
tekst2.setFont( font );
tekst2.setString( "Tekst2" );



Dlaczego nie ładuje mi dwa razy innej czcionki font? Muszę używać font1, dla kolejnego napisu kolejna zmianna font2. Jak zrobić, żebym za pomocą tej jednej zmiennej mógł zmieniać tylko czcionkę, która będzie zastosowana do napisów, których używam po tym załadowaniu czcionki? Wygląda to tak, jak font był tak jakby załadowywany dopiero w trakcie draw, nie rozumiem.

Tyczy się to także nadpisywania tekstur loadfromfile... Dajmy na to, że załadowałem teksturę, potem przypisuję ją dla jakiegoś sprite'a, a potem nadpisuję tą teksturę innym obrazkiem np. i ten pierwszy tak jakby w ogóle nie był załadowany, tylko ładuje mi wyłącznie ten drugi. O co z tym chodzi?
P-154750
Gibas11
» 2016-12-10 22:26:12
Metoda
setFont
 bierze jako parametr referencję na obiekt typu
sf::Font
 i cały czas używa tego samego, tj. napis nie kopiuje sobie czcionki. Coś takiego byłoby skrajnie nieefektywne. Dlatego jedna czcionka – jeden obiekt.
P-154752
Warmix
Temat założony przez niniejszego użytkownika
» 2016-12-10 22:52:30
aha, czyli rozumiem, że dla jednego obiektu ma być przypisana jedną czcionka, to samo z teksturami, dla jednego sprite'a jedna tekstura, natomiast mogę modyfikować w trakcie ich położenie, rozmiary wielokrotnie?
P-154756
Gibas11
» 2016-12-10 23:01:09
Możesz używać setek tekstów i sprite'ów z jedną teksturą/czcionką, ale samej tekstury/czcionki nie powinieneś modyfikować bo te teksty / sprite'y „zapamiętują” te obiekty i potem się do nich odwołują.

Prosty przykład:
C/C++
sf::Font font;
font.loadFromFile( "czcionka1.ttf" );

sf::Text text;
text.setFont( font );

font.loadFromFile( "czcionka2.ttf" );
//Od teraz obiekt text będzie używać czcionki z pliku "czcionka2.ttf"
P-154757
Warmix
Temat założony przez niniejszego użytkownika
» 2016-12-11 13:03:20
A jeszcze mam pytanie.

Taki kod w jednej klasie.
C/C++
sf::RectangleShape obrazek;
obrazek.setSize( sf::Vector2f( 128, 128 ) );
obrazek.setPosition( 0, 0 );
obrazek.setTexture( & tekstura );

Potem powiedzmy następuje zmiana widoku okna i chciałbym podmienić teksturę tego obiektu obrazek.
i w innej klasie tworzę:
C/C++
obrazek.setSize( sf::Vector2f( 200, 200 ) );
obrazek.setPosition( 0, 0 );
obrazek.setTexture( & tekstura2 );

Pierwsze draw obrazek działa poprawnie, wyświetla mi się to, co ma się wyświetlić, ale po zmianie tekstury wyrzuca mi coś dziwnego. Wprawdzie tekstura zmienia się, ale gdy  wyświetlam ten obiekt to wyrzuca mi tak jakby 1/3 szerokości i 1/3 wysokości tekstury i rozciąga ją do tych zadeklarowanych rozmiarów. O co chodzi?

Jeżeli w tym drugim kodzie dam nowy obiekt tego samego typu i jego wyświetlę przez draw to działa poprawnie, ale chciałbym użyć tego wcześniejszego, bo bez sensu tworzyć milion tych obiektów.
P-154774
Gibas11
» 2016-12-11 14:55:52
sf::Shape::setTexture, przekaż
true
 jako drugi parametr zmieniając teksturę.
P-154781
Warmix
Temat założony przez niniejszego użytkownika
» 2016-12-11 22:30:00
Dzięki, rzeczywiście pomogło.
P-154797
« 1 »
  Strona 1 z 1