01101101 Temat założony przez niniejszego użytkownika |
» 2020-04-19 00:41:14 I w zdarzeniu SDL_TEXTINPUT też nie powinno się nic rysować? |
|
pekfos |
» 2020-04-19 22:14:37 Żadne zdarzenie nie powinno niczego rysować. To niepotrzebne spowolnienie, a rysowanie i tak nie będzie dawać zamierzonego efektu. Poprawnie skonstruowana aplikacja będzie wielokrotnie czyścić ekran, więc rysowanie w bezpośredniej odpowiedzi na zdarzenie sprawi, że będziesz widzieć efekt tylko przez ułamek sekundy. |
|
01101101 Temat założony przez niniejszego użytkownika |
» 2020-04-20 14:37:57 Mając pętle taką jak poniżej jakiekolwiek rysowanie nie powinno się znajdować w pętli PollEvent ? Generalnie mam funkcje która rysuje plansze i wpisuje tam początkowe cyfry ale jeśli ją wpisuje w miejsce poza pętlą PollEvent po chwili cyfry znikają i aplikacja się sama zamyka
while(runnig)
{ while(Pollevent) {
// Osbługa zdarzeń
}
}
|
|
pekfos |
» 2020-04-20 17:33:02 while( runnig ) { while( Pollevent ) { } } Generalnie mam funkcje która rysuje plansze i wpisuje tam początkowe cyfry ale jeśli ją wpisuje w miejsce poza pętlą PollEvent po chwili cyfry znikają i aplikacja się sama zamyka |
Inicjalizacja gry i jej zamykanie nie leży w kompetencjach funkcji rysującej. Jej interes to wyłącznie rysowanie. Pewne rzeczy muszą być rozdzielone, wtedy nie będziesz mieć problemu, że funkcja powinna być wywołana w dwóch wzajemnie się wykluczających miejscach. |
|
01101101 Temat założony przez niniejszego użytkownika |
» 2020-04-20 21:22:35 Próbuję jakoś rozdzielić funkcję na dwie, jedna rysuje samą pustą plansze a druga rysuje na niej cyfry z tablicy ale wywołanie drugiej funkcji powoduje po minucie znikniecie cyfr i zamknięcie aplikacji, zastanawiam się nad tym gdzie jest błąd.. void rysuj_cyfry()
{ TTF_Init(); TTF_Font * font = TTF_OpenFont( "arialn.ttf", 20 ); SDL_Color White = { 255, 255, 255 }; SDL_Surface * surfaceMessage = NULL; SDL_Texture * Message = NULL; SDL_Rect Message_rect; Message_rect.x = 65; Message_rect.y = 65; Message_rect.w = 20; Message_rect.h = 20; char bufor[ 256 ]; for( int i = 0; i < 9; i++ ) { Message_rect.x = 65; for( int j = 0; j < 9; j++ ) { if( matrix[ i ][ j ] != 0 ) { sprintf( number, "%d", matrix[ i ][ j ] ); surfaceMessage = TTF_RenderText_Solid( font, number, White ); Message = SDL_CreateTextureFromSurface( renderer, surfaceMessage ); SDL_RenderCopy( renderer, Message, NULL, & Message_rect ); } Message_rect.x += 50; } Message_rect.y += 50; } SDL_RenderPresent( renderer ); SDL_DestroyTexture( Message ); SDL_FreeSurface( surfaceMessage ); }[ / i ][ / i ] |
|
pekfos |
» 2020-04-20 22:29:52 Wyłącza się pewnie z powodu wszystkich zasobów, które wyciekają z tego kodu. Sprawdź w dokumentacji wszystkie funkcje w tym kodzie, ze szczególnym uwzględnieniem tego czy i jak powinieneś zwolnić zasoby, które są z nich zwracane. |
|
01101101 Temat założony przez niniejszego użytkownika |
» 2020-04-20 22:44:50 Raczej wszystko jest zwolnione na dole, no może oprócz SDL_Rect i SDL_Color ale czy to się zwalnia? TTF zwalniam w funkcji main |
|
pekfos |
» 2020-04-20 23:04:51 Raczej wszystko jest zwolnione na dole |
Nie ma być na dole. Alokujesz 81 razy i wystarczy raz zwolnić? TTF zwalniam w funkcji main |
Niby jak? Zmienna font nie jest w żaden sposób wystawiona na zewnątrz. Jak w wielu miejscach wczytujesz "arialn.ttf", to to jest tylko nieefektywne używanie zasobów. Każde trzeba zwolnić. W tym wypadku powinieneś raczej przekazywać czcionkę z maina. Nie ma sensu wczytywać jej od nowa przy każdym rysowaniu. TTF_Init() też nie wygląda, jakby było na swoim miejscu. |
|
1 « 2 » 3 |