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

[SDL] Poruszanie się po planszy

Ostatnio zmodyfikowano 2020-04-21 16:54
Autor Wiadomość
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ć?
P-176684
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.
P-176686
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ń

}
 

}
P-176690
pekfos
» 2020-04-20 17:33:02
C/C++
while( runnig )
{
    while( Pollevent )
    {
        // wyłącznie osbługa zdarzeń
    }
    // cała reszta - wyświetlanie i aktualizacja stanu gry
}

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.
P-176692
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..

C/C++
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 ]
P-176696
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.
P-176700
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
P-176702
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.
P-176703
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona