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: font.loadFromFile( "arial.ttf" ); tekst.setFont( font ); tekst.setString( "Tekst1" );
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? |
|
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. |
|
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? |
|
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: sf::Font font; font.loadFromFile( "czcionka1.ttf" );
sf::Text text; text.setFont( font );
font.loadFromFile( "czcionka2.ttf" );
|
|
Warmix Temat założony przez niniejszego użytkownika |
» 2016-12-11 13:03:20 A jeszcze mam pytanie. Taki kod w jednej klasie. 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ę: 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. |
|
Gibas11 |
» 2016-12-11 14:55:52 |
|
Warmix Temat założony przez niniejszego użytkownika |
» 2016-12-11 22:30:00 Dzięki, rzeczywiście pomogło. |
|
« 1 » |