mundzio123 Temat założony przez niniejszego użytkownika |
[SDL] Kafelki + przewijanie mapy » 2011-04-17 22:08:19 I oto znowu mam mały problem z kafelkowaniem mapy. Chodzi o przewijanie jej. Nie mam pojęcia jak zrobić żeby przy wciskaniu jednego guzika mapa przewijała się w którąś strone.
#include <SDL/SDL.h> #include "czas.hpp"
SDL_Surface * ekran = NULL; SDL_Surface * grass = NULL; SDL_Rect rPole, MapaDestination; SDL_Surface * ziemia = NULL;
SDL_Event zdarzenie;
int pole[ 10 ][ 19 ] = { { 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, };
const int FRAMES_PER_SECOND = 20; int map_x = 0, map_y = 0, frame; bool koniec = false, cap = true; Uint8 * keystate = SDL_GetKeyState( NULL ); int x; Timer fps;
void ruch() { for( int i = 0 + x; i < 10 + x; i++ ) { for( int j = 0; j < 19; j++ ) { if( pole[ i ][ j ] == 0 ) { SDL_BlitSurface( ziemia, NULL, ekran, & rPole ); } if( pole[ i ][ j ] == 1 ) { SDL_BlitSurface( grass, NULL, ekran, & rPole ); } rPole.x = rPole.x + 50; } rPole.y = rPole.y + 50; rPole.x = 0; } }
int main( int argc, char * args[] ) { SDL_Init( SDL_INIT_EVERYTHING ); ekran = SDL_SetVideoMode( 500, 500, 32, SDL_DOUBLEBUF | SDL_SWSURFACE ); grass = SDL_LoadBMP( "sprite/grass.bmp" ); ziemia = SDL_LoadBMP( "sprite/ziemia.bmp" ); while( koniec != true ) { fps.start(); while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { koniec = true; } } if( fps.get_ticks() < 1000 / FRAMES_PER_SECOND ) { SDL_Delay(( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() ); } if( keystate[ SDLK_RIGHT ] ) { MapaDestination.x--; frame++; } frame = 0; if( frame == 50 ) { x++, frame = 0; } if( frame == 0 ) { ruch(); } SDL_BlitSurface( ekran, NULL, ekran, & MapaDestination ); SDL_Flip( ekran ); } }
Tak jak teraz jest w kodzie mapa rysuje się i co prawda przewija, lecz rysuje coś dziwnego ? Nie wiem jak to określić, poprosto bez żadnego schematu. Prosze o pomoc :) |