Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Robiłem se takie cuś w SDLu ażeby zmieniał sprity w zależności od kierunku ;P Niestety pochrzaniłem coś w kodzie i program wyłącza się zaraz po włączeniu xd Kodzik:

#include<SDL.h>

int main ( int argc, char *argv[] )
{
    SDL_Surface *screen, *temp, *spr_up, *spr_down, *spr_left, *spr_right, *back, *sprite;
    SDL_Rect rcMan, rcBack;
    SDL_Event event;
    Uint8 *keyState;
    
    int gameEnd, cWhite;
    
    SDL_Init ( SDL_INIT_VIDEO );
    
    screen = SDL_SetVideoMode ( 640, 480, 0, 0 );
  
    temp = SDL_LoadBMP ( "man_up.bmp" );
    spr_up = SDL_DisplayFormat ( temp );
    SDL_FreeSurface ( temp );
    
    temp = SDL_LoadBMP ( "man_down.bmp" );
    spr_down = SDL_DisplayFormat ( temp );
    SDL_FreeSurface ( temp );
    
    temp = SDL_LoadBMP ( "man_left.bmp" );
    spr_left = SDL_DisplayFormat ( temp );
    SDL_FreeSurface ( temp );
    
    temp = SDL_LoadBMP ( "man_right.bmp" );
    spr_right = SDL_DisplayFormat ( temp );
    SDL_FreeSurface ( temp );

    cWhite = SDL_MapRGB ( screen -> format, 255, 255, 255 );
    SDL_SetColorKey ( sprite, SDL_SRCCOLORKEY | SDL_RLEACCEL, cWhite );

    temp = SDL_LoadBMP ( "tlo.bmp" );
    back = SDL_DisplayFormat ( temp );
    SDL_FreeSurface ( temp );
    
    rcMan.x = 50;
    rcMan.y = 50;
    
    gameEnd = 0;
    
    while ( gameEnd = 0 )
    {
      if ( SDL_PollEvent ( &event ) ) 
      {
        switch ( event.type )
        {
        case SDL_QUIT: 
        gameEnd = 1;
        break;
        
        case SDL_KEYDOWN:
           switch ( event.key.keysym.sym ) 
           {
                  case SDLK_ESCAPE:
                  case SDLK_q:
                  gameEnd = 1;
                  break;
           }
      break;
      }
      }
    
    keyState = SDL_GetKeyState ( NULL );

    if ( keyState [SDLK_LEFT] ) 
    {
         rcMan.x -= 1;
         sprite = spr_left;
    }
    if ( keyState [SDLK_RIGHT] ) 
    {
         rcMan.x += 1;
         sprite = spr_right;
    }
    if ( keyState [SDLK_UP] ) 
    {
         rcMan.y -= 1;
         sprite = spr_up;
    }
    if ( keyState [SDLK_DOWN] ) 
    {
         rcMan.y += 1;
         sprite = spr_down;
    }
    
    for (int x = 0; x < 640 / 64; x++) 
    {
      for (int y = 0; y < 480 / 64; y++) 
      {
        rcBack.x = x * 64;
        rcBack.y = y * 64;
        SDL_BlitSurface ( back, NULL, screen, &rcBack );
      }
    }
    
    SDL_BlitSurface ( sprite, NULL, screen, &rcMan );

    SDL_UpdateRect ( screen, 0, 0, 0, 0 );
  }
  
  SDL_FreeSurface ( back );
  SDL_FreeSurface ( spr_up );
  SDL_FreeSurface ( spr_down );
  SDL_FreeSurface ( spr_left );
  SDL_FreeSurface ( spr_right );
  SDL_Quit ( );

  return 0;
}

 

:E

Opublikowano

Nie masz racji Marmot xD Pętla while wykonuje główne działanie programu tylko wtedy gdy gameEnd == 0 :P Kiedy wyłączymy progs, wartość gameEnd zmienia się na 1 nie? :)

Opublikowano

@UP:Mi też ;p

A co do kodu to błąd nie jest w pętli while... bo jak usunąłem zawartość pętli ( nie pętle ;p ) to i tak wyłączało się ;p

Sprawdź czy wszystko jest dobrze napisane w pierwszych linijkach ;p

Opublikowano

a przypadkiem zamiast

while ( gameEnd = 0 )

nie powinno byc

while ( gameEnd == 0 )

Bo aktualnie petla nigdy sie nie wykona, gdyz przypisanie 0 do gameEnda zwraca 0.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...