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

Błąd umieszczania czcionki w sfml 2.x

Ostatnio zmodyfikowano 2016-08-12 17:49
Autor Wiadomość
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:

C/C++
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

P-150767
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?
P-150768
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/
P-150769
marcolo2307
» 2016-08-12 15:36:08
Tło jakby zadziałało
 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.

--------------------------

trzcionkę
?!

A kod wklejaj na forum w znaczniki.
P-150771
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
P-150772
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ź.
P-150773
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:
C/C++
#include "gra.h"

int main()
{
    Game gra;
    gra.runGame();
    return 0;
}

gra.h:
C/C++
#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:
C/C++
#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 ) )
        {
            // wyjscie niestandardowe
            if(( zdarzenie.type == Event::Closed ) ||( zdarzenie.type == Event::KeyPressed && zdarzenie.key.code == Keyboard::Escape ) )
                 state = END;
           
            //wyjscie normalne
            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();
    }
}
P-150774
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.
P-150775
« 1 » 2
  Strona 1 z 2 Następna strona