[SDL] Statki - wykrywanie klikniętych pól na mapie
Ostatnio zmodyfikowano 2013-03-13 19:21
sheadovas Temat założony przez niniejszego użytkownika |
[SDL] Statki - wykrywanie klikniętych pól na mapie » 2013-03-13 19:21:35 Z góry uprzedzam że jestem początkujący jeśli chodzi o SDL. Jestem obecnie w trakcie pisania statków i obecnie jestem na pisaniu zdarzenia podczas którego program ma wyświetlać w klikniętym miejscu kwadrat(obecnie chodzi mi tylko o sprawdzenie czy wszytsko działa później to rozbuduje). Jednak wyświetla w sumie tylko 4 kwadraty (ze 100 na planszy). Moje pytanie to jak sprawic aby wszytskie pola były aktywne i aby "coś się działo". #include <SDL.h> #include <SDL_image.h> #include "funkcje.h"
SDL_Surface * screen; SDL_Surface * tlo; SDL_Surface * plansza; SDL_Surface * kratka;
SDL_Event zdarzenie;
SDL_Rect pole[ 10 ];
int myszX, myszY;
const int SCRN_WDTH = 500; const int SCRN_HGHT = 500; const int SCRN_BPP = 32;
bool trafiony[ 10 ][ 10 ];
int main( int argc, char * args[] ) { SDL_Init( SDL_INIT_EVERYTHING ); screen = SDL_SetVideoMode( SCRN_WDTH, SCRN_HGHT, SCRN_BPP, SDL_SWSURFACE ); plansza = load_image( "images/plansza.png" ); kratka = load_image( "images/kratka.png" ); apply_surface( 0, 0, plansza, screen ); pole[ 0 ].w = 50; pole[ 0 ].h = 50; pole[ 0 ].x = 0; pole[ 0 ].y = 0; for( int i = 1; i < 10; i++ ) { pole[ i ].x += 50; pole[ i ].y += 50; } bool wyjscie = false; while( !wyjscie ) { SDL_Flip( screen ); while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_MOUSEMOTION ) { myszX = zdarzenie.motion.x; myszY = zdarzenie.motion.y; } if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } if( zdarzenie.type == SDL_MOUSEBUTTONDOWN ) { for( int x = 0; x < 10; x++ ) { for( int y = 0; y < 10; y++ ) { if( zdarzenie.button.button == SDL_BUTTON_LEFT &&( myszX >= pole[ x ].x && myszX <= pole[ x ].x + pole[ 0 ].w ) &&( myszY >= pole[ y ].y && myszY <= pole[ y ].y + pole[ 0 ].h ) ) { apply_surface( pole[ x ].x, pole[ y ].y, kratka, screen ); continue; } } } } } } SDL_FreeSurface( plansza ); SDL_FreeSurface( kratka ); SDL_Quit(); return 0; } i zapomniałem wcześniej obie funkcje użyte w kodzie: SDL_Surface * load_image( std::string nazwaPliku ) { SDL_Surface * loadedImage = NULL; SDL_Surface * optimizedImage = NULL; loadedImage = IMG_Load( nazwaPliku.c_str() ); if( loadedImage != NULL ) { optimizedImage = SDL_DisplayFormat( loadedImage ); SDL_FreeSurface( loadedImage ); } return optimizedImage; }
void apply_surface( int x, int y, SDL_Surface * source, SDL_Surface * destination ) { SDL_Rect offset; offset.x = x; offset.y = y; SDL_BlitSurface( source, NULL, destination, & offset ); }
Problem rozwiązany sorry za ewentualny spam |
|
« 1 » |