• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SDL Renderowanie Textu

Object Storage Arubacloud
0 głosów
362 wizyt
pytanie zadane 5 października 2019 w C i C++ przez Jakub Chomicz 1 Użytkownik (840 p.)

Witam mam problem otóż pisałem obiektowo aplikacje i obecnie pracuję nad wyświetlaniem textu tylko że jest problem otóż skubaniec nie chce się pokazać pomimo że żaden error mi się nie wyświetla ktoś ma jakiś pomysł ? proszę o szybką pomoc...

#include "TexturesAndTexts.h"

SDL_Texture * Texture::Load(const char*file,SDL_Renderer*ren)
{
    SDL_Surface*Surf = IMG_Load(file);
    SDL_Texture*tex = SDL_CreateTextureFromSurface(ren,Surf);
    SDL_FreeSurface(Surf);
    return tex;
}
void Texts::TextCreate(const char*name,const char*path,int s,SDL_Color color,int x,int y,SDL_Renderer*ren)
{
    TR.x = x;
    TR.y = y;
    TTF_Font*font = TTF_OpenFont(path,s);
    SDL_Surface*Surf = TTF_RenderText_Blended(font,name,color);
    SDL_Texture*textrender = SDL_CreateTextureFromSurface(ren,Surf);
    SDL_FreeSurface(Surf);
    SDL_QueryTexture(textrender,NULL,NULL,&TR.w,&TR.h);
    SDL_RenderCopy(ren,textrender,NULL,&TR);
}
#include "Game.h"
Texts*T;
Game::Game()
{

}
Game::~Game()
{

}
void Game::Init(const char*Title,int x,int y,int w,int h,bool FC)
{
    if(SDL_Init(SDL_INIT_EVERYTHING) == 0)
    {
        cout<<"SDL_INITIALIZATION_SUCCEED"<<endl;
        WINDOW = SDL_CreateWindow(Title,x,y,w,h,FC);
        if(WINDOW)
        {
            cout<<"Window Created"<<endl;
        }
        RENDER = SDL_CreateRenderer(WINDOW,-1,0);
        if(RENDER)
        {
            cout<<"Render Created"<<endl;
        }
        Running = true;
    }
    else
    {
        Running = false;
    }
    SDL_Color kolor = {255,0,0};
    T = new Texts;
    T->TextCreate("LOL","FONST/comici.ttf",60,kolor,0,0,RENDER);
}
void Game::Events()
{
    SDL_Event event;
    SDL_PollEvent(&event);
    switch(event.type)
    {
    case SDL_QUIT:
        Running = false; break;
    default:
        break;
    }
}
void Game::UpdateAndRender()
{

}
void Game::CleanRender()
{

}
void Game::QuitGame()
{
    cout<<"Cleaned"<<endl;
    SDL_DestroyWindow(WINDOW);
    SDL_Quit();
}
#include "Game.h"
Game*G;
int main(int argc,char* args[])
{
    G = new Game();
    G->Init("Demon Jake",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,1280,720,false);
    while(G->Running)
    {
        G->Events();
        G->UpdateAndRender();
    }
    G->CleanRender();
    G->QuitGame();
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 5 października 2019 przez j23 Mędrzec (194,920 p.)
wybrane 5 października 2019 przez Jakub Chomicz 1
 
Najlepsza

"FONST/comici.ttf"

Na pewno chodziło Ci o katalog FONST?

Dlaczego T i G jest globalne?

Powinieneś też zwalniać fonta funkcją TTF_CloseFont.

Chyba już Ci pisałem, żebyś nie nazywał zmiennych dużymi literami, bo ten sposób jest zarezerwowany dla makr, aliasów typów (w stylu C) i stałych.

komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
Tak to dobry folder :/ masz jeszcze jakieś pomysły?
komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
Już tą funkcję od zwalniania fonta użyłem pod freesurface ale nadal nic :/
komentarz 5 października 2019 przez j23 Mędrzec (194,920 p.)
Sprawdź, czy się w ogóle ten font ładuje.
komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
jak ?
komentarz 5 października 2019 przez j23 Mędrzec (194,920 p.)

Najprościej debuggerem - ustawiasz breakpointa na linii z TTF_RenderText_Blended i sprawdzasz wartość wskaźnika font. Jeśli jest null, to font nie został wczytany.

Inna opcja to po prostu zrób warunek sprawdzający wskaźnik font po wywołaniu funkcji TTF_OpenFont.

komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
    if(font=NULL)
    {
        cout<<"cdashdhasdl"<<endl;
    }

ani tu

    if(font)
    {
        cout<<"cdashdhasdl"<<endl;
    }

ani tu 

nic nie wypisuje

komentarz 5 października 2019 przez j23 Mędrzec (194,920 p.)

if(font=NULL)

Z takim warunkiem to na pewno nic nie wypisze...

 

Skoro drugi warunek też nic nie wypisuje, to znaczy, że font nie ładuje się.

komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
Sory na obiektóce mało się znam jeszcze a na sdl to prawie wcale dlatego się ucze
komentarz 5 października 2019 przez j23 Mędrzec (194,920 p.)
Ten błąd z obiektówką nie ma nic wspólnego. To są podstawy C ;)

Jeszcze raz napiszę: skoro drugi warunek też nic nie wypisuje, to znaczy, że font nie ładuje się.
komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
to o co może w takim układzie chodzić ?
komentarz 5 października 2019 przez j23 Mędrzec (194,920 p.)
Katalog roboczy może być inny niż ten, w którym jest binarka (w C::B to typowe).
komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
ok dzięki naprawione
komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
ale mam jeszcze 1 problem którego wgl nie rozumiem...

jak odpalam program bezpośrednio z pliku z folderu bin to nie wyświetla mi obrazów zaś jak odpalam z C::B  to działa elegancko wiesz może jeszcze o co tu może chodzić ?
komentarz 5 października 2019 przez j23 Mędrzec (194,920 p.)
C::B zmienia katalog roboczy do, jeśli mnie pamięć nie myli, katalogu projektu i stąd te problemy. Najsensowniej jest zrobić dowiązanie symboliczne w katalogu z binarką do katalogów z danymi programu. Wtedy będzie działać i z C::B, i z dwukliku.
komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
czyli ? bo nic prawie z tego nie rozumiem xd
komentarz 5 października 2019 przez j23 Mędrzec (194,920 p.)

Trzeba internetów używać -> link

komentarz 5 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
no dobra ale jak to zrobić ?
komentarz 5 października 2019 przez j23 Mędrzec (194,920 p.)

Mniej więcej tak (przy założeniu, że katalog z fontami leży w katalogu projektu, a binarka w <projekt>\bin\[debug|release]):

  1. wchodzisz do katalogu z binarką.
  2. otwierasz w nim wiersz poleceń.
  3. wpisujesz mklink /D Fonst ../../Fonst.
  4. powinno pojawić się dowiązanie.

Jeśli coś nie zadziała, to sam pokombinuj.

komentarz 6 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
kurde pobawiłem się troche ale dalej nic nie działa.

D:\GRY\Demon Jake\FONTS to jest ścieżka do font-ów może coś robie nie tak weź mi to wypisz jak mam to w pisać w cmd
komentarz 6 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
w sensie żeby się dowiązało symbolicznie
komentarz 6 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
You do not have sufficient privilege to perform this operation. mówi że nie mam uprawnień :/
komentarz 6 października 2019 przez j23 Mędrzec (194,920 p.)

Dobra, zamiast /D daj /J. Do stworzenia junction point nie trzeba uprawnień.

komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
"Nie można utworzyć pliku który już istnieje"
komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)
Jeszcze się z tym bawisz?

Pokaż screen wiersza poleceń z komendą, którą wywołujesz.
komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)

Do Fonts-ów wypisało że gitara ale do PNG pisze ze już istnieje a najlepsze jest to że już jak teraz odpalam(bezpośrednio z pliku) to zawiesza mi program nic nie działa i po chwili się wyłącza xd

komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)

Ścieżki ze spacjami musisz wpisywać w cudzysłowie.  Po drugie, nie podajesz nazwy "dowiązania". Składnia wywołania mklink jest taka:

mklink /J <nazwa dowiązania> <ścieżka do katalogu>

czyli:

mklink /J FONTS "D:\GRY\Demon Jake\FONTS"

komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)

Dalej nic :/

komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)

Nic, czyli co? Nie tworzy się, czy twój program nie działa?

Z tego, co pamiętam, C::B tworzył binarkę w katalogu Debug lub Release, a Ty komendę wywołujesz w katalogu Bin. Więc pytanie, czy tam leży binarka?

komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)

Wiem Pomyślałem o tym jak nie zadziałało więc zrobiłem tak jak mówisz w folderze Debug i nadal to samo po prostu biały ekran nie ma żadnych textur ani fontów nic

komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)
Sprawdzałeś w ogóle, czy stworzyło się to dowiązanie w katalogu z programem?
komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)

Tak stworzyło się

komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)
Jak odpalasz z C::B to działa?
komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)

No tak

komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)

Dziwne. Skoro dowiązanie jest poprawnie zrobione, to program powinien widzieć je jak zwykły katalog. Chyba że gdzieś w programie przestawiany jest katalog roboczy...

Daj taki warunek:

if(!font) {
    std::cout << "TTF_OpenFont error: " << TTF_GetError() << '\n';
}

i powiedz, co wypisuje.

komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)

właściwie to nic mi nie wypisuje :/

komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)

Nawet tekstu "TTF_OpenFont error: "? Jeśli tak, to znaczy, że font jest ładowany.

komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)

nawet TTF_OpenFont error nie wyświetla

 

komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
no ale jak jest ładowany to w czym tkwi problem

:/
komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)
Ta aplikacja oczywiście jest konsolowa, tak?

Wszystkie niezbędne pliki, biblioteki i katalogi są w katalogu programu?
komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
tak. bo z sdl2 to do folderu z binarką tylko .ddl trzeba wrzucić co nie?
komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)
Pewnie tak.

Co z tą konsolą?
komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
tak to konsolowa apk
komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)
Czyli wypisać coś powinno w przypadku błędu. Daj podobne warunki do innych fragmentów, gdzie ładujesz coś z pliku.
komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)

Wypisuje to co napisałem w sekcji else czyli PNG_OK

komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)
Nie wklejaj całego ekranu, bo kompletnie nic nie widać.
komentarz 7 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
w sumie racja. Tak czy siak pisze ze wszystko jest ok a nie wyświetla
komentarz 7 października 2019 przez j23 Mędrzec (194,920 p.)
Skończyły mi się pomysły. Skoro font się ładuje, to nie jest to problem katalogów. Jakby brakowało jakiejś DLL-ki, to dostałbyś odpowiednie info o tym. Być może to kwestia zmiennych środowiskowych, procesy potomne dziedziczą je po rodzicu (czyli C::B)... Ciężko powiedzieć.
komentarz 9 października 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
no trudno dobra dzięki za pomoc coś pokombinuje

Podobne pytania

0 głosów
1 odpowiedź 328 wizyt
pytanie zadane 23 września 2017 w C i C++ przez DonTweaks Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 177 wizyt
pytanie zadane 18 czerwca 2017 w C i C++ przez shout123131 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 381 wizyt
pytanie zadane 13 maja 2023 w C i C++ przez antekwi546 Użytkownik (510 p.)

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...