Yoda Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 lol: (...) gameEnd = 0; while ( gameEnd = 0 ) { (...) xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 3 Stycznia 2008 Autor Udostępnij Opublikowano 3 Stycznia 2008 To jak to powinno wyglądać? W innym projekcie też tak miałem i działało :| Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mike_p Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 @Konrad No i? :| Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 o sorki, pomyliłem sie xP zaraz sprawdzę u siebie ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 3 Stycznia 2008 Autor Udostępnij Opublikowano 3 Stycznia 2008 Nom zależałoby mi :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 Bo zgodnie z tym co napisał w kodzie, to sensowniejszym wydaje się: while ( gameEnd != 0 ) od obecnego, bo zawsze będzie się wyłączać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 3 Stycznia 2008 Autor Udostępnij Opublikowano 3 Stycznia 2008 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? :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 Hm, rzeczywiście :P . Ciągle mi się myli działanie while. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 @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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 3 Stycznia 2008 Autor Udostępnij Opublikowano 3 Stycznia 2008 Ale co by tam mogło być źle? :| No nic popatrzę... OK już działa xD! Jutro podam rozwiązanie - tymczasem uciekam... :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 ale ciężkie rozwiązanie.... by pętla while hulała musi mieć wartość true... wielka filozofia... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hanjuso Opublikowano 3 Stycznia 2008 Udostępnij Opublikowano 3 Stycznia 2008 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę