Banneq Temat założony przez niniejszego użytkownika |
Błąd umieszczania czcionki w sfml 2.x » 2016-08-12 13:51:30 Chcąc w swoim programie zamieścić trzcionkę i ją wykorzystać loadFromFile zwaraca wartość false. Zrobiłem to w ten sposób: if( !font.loadFromFile( "menuFont.ttf" ) ) { MessageBox( NULL, "Nie udalo sie wczytac czcionki!", "ERROR", MB_OK ); return; }
Plik .ttf zamieszczony jest w folderze gdzie zapisany jest projekt. https://zapodaj.net/dfff1ac57c81d.jpg.html |
|
Gibas11 |
» 2016-08-12 13:54:35 1. Czcionka jest poprawna / da się ją otworzyć innymi programami? 2. Możesz otworzyć w programie np. tlo.jpg? |
|
Banneq Temat założony przez niniejszego użytkownika |
» 2016-08-12 14:20:08 Tło jakby zadziałało ale ujawnił się kolejny problem. Gdy uruchomił program, to zakręciło się "kułeczko" przy kursorze, jakby coś zaczęło mielić, ale w sumie nic się nie pojawiło. Jest to moja pierwsze próba napisania czegokolwiek "większego" obiektowo. Co jest źle?
game.h: http://wklej.org/id/2782051/
main.cpp: http://wklej.org/id/2782053/
|
|
marcolo2307 |
» 2016-08-12 15:36:08 jakby? Udało się je wczytać, czy miałeś błąd? Po twoim poprzednim temacie zakładam, że piszesz w Code::Blocks. Plik z czcionką powinieneś mieć w tym samym folderze co projekt w przypadku uruchamiania z IDE i w bin/debug (lub release) przy odpalaniu samego .exe. Sam kod jest w porządku, więc albo masz literówkę w nazwie czcionki albo jest ona w złym miejscu. Ewentualnie jest uszkodzona. -------------------------- ?! A kod wklejaj na forum w znaczniki. |
|
Banneq Temat założony przez niniejszego użytkownika |
» 2016-08-12 15:46:46 Tak, udało się wczytać. A ta literówka to mnie dzisiaj cały dzień prześladuje hahaha |
|
marcolo2307 |
» 2016-08-12 15:51:21 Skoro tylko czcionka nie działa, to zapewne jest uszkodzona, weź z plików Windows'a arial.ttf i sprawdź. |
|
Banneq Temat założony przez niniejszego użytkownika |
» 2016-08-12 16:16:27 Okey, teraz pokazuje okno aplikacji i od razu je zamyka. Nawet nie można zobaczyć co tam jest. main.cpp: #include "gra.h"
int main() { Game gra; gra.runGame(); return 0; }
gra.h: #include <SFML/Graphics.hpp> #include <string> #include <windows.h>
using namespace std; using namespace sf;
class Game { public: Game(); ~Game(); void runGame(); protected: enum GameState { MENU, GAME, GAME_OVER, END }; GameState state; private: Font font; void menu(); };
gra.cpp: #include "gra.h" #include <SFML/Graphics.hpp>
using namespace std; using namespace sf;
RenderWindow oknoAplikacji( VideoMode( 1920, 1080, 32 ), "Pro Game v1.0", Style::Default );
Game::Game() { state = END; if( !font.loadFromFile( "arial.ttf" ) ) { MessageBox( NULL, "Blad z wczytaniem czcionki", "error", MB_OK ); return; } state = MENU; }
Game::~Game() { }
void Game::runGame() { switch( state ) { case MENU: menu(); break; case GAME: break; case END: break; } }
void Game::menu() { Text title( "Pro Game v1.0", font, 30 ); title.setStyle( Text::Bold ); title.setPosition( 1280 / 2 - title.getGlobalBounds().width / 2, 20 ); Texture tekstura; tekstura.loadFromFile( "tlo.jpg" ); Sprite obrazek; obrazek.setTexture( tekstura ); const int ile = 2; Text tekst[ ile ]; string str[] = { "Graj", "Wyjdz" }; for( int i = 0; i < ile; i++ ) { tekst[ i ].setFont( font ); tekst[ i ].setCharacterSize( 65 ); tekst[ i ].setString( str[ i ] ); tekst[ i ].setPosition( 1280 / 2 - tekst[ i ].getGlobalBounds().width / 2, 250 + i * 120 ); } while( state = MENU ) { Vector2f mouse( Mouse::getPosition() ); Event zdarzenie; while( oknoAplikacji.pollEvent( zdarzenie ) ) { if(( zdarzenie.type == Event::Closed ) ||( zdarzenie.type == Event::KeyPressed && zdarzenie.key.code == Keyboard::Escape ) ) state = END; if( tekst[ 1 ].getGlobalBounds().contains( mouse ) && zdarzenie.type == Event::MouseButtonReleased && zdarzenie.key.code == Mouse::Left ) state = END; } for( int i = 0; i < ile; i++ ) if( tekst[ i ].getGlobalBounds().contains( mouse ) ) tekst[ i ].setColor( Color::Cyan ); else tekst[ i ].setColor( Color::White ); oknoAplikacji.clear( Color::Black ); oknoAplikacji.draw( obrazek ); oknoAplikacji.draw( title ); for( int i = 0; i < ile; i++ ) oknoAplikacji.draw( tekst[ i ] ); oknoAplikacji.display(); } }
|
|
marcolo2307 |
» 2016-08-12 16:42:42 while( state = MENU ) Porównuj, nie przypisuj. Edit: Switch od state nie jest w pętli. Przeleć program debuggerem linijka po linijce, bez problemu znajdziesz gdzie okno się zamyka. |
|
« 1 » 2 |