[SDL] Feld in einem Grid makieren



  • Ich hab ein wenig wieder mit SDL programmiert und hab ein kleines Grid geschrieben.
    Nun wollte ich, wenn man mit der Maus über die Felder geht, das dieses Feld heller wird.
    Einwenig wie bei einem alten Strategiespiel.

    #include <SDL/SDL.h>
    using namespace std;
    
    SDL_Surface *screen = NULL;
    SDL_Event event;
    const unsigned short int wscreen = 1024,
                         	hscreen = 768,
                         	bpp = 32;
    
    int main( int argc, char* args[] )
    {
    	bool done = false;
    	SDL_Rect cube={0,0,30,30};
    	if( SDL_Init( SDL_INIT_VIDEO ) == -1)return 1;
    
    	screen = SDL_SetVideoMode( wscreen,hscreen,bpp,SDL_SWSURFACE  );
    	if( screen == NULL )return 1;
    
    	SDL_WM_SetCaption("SDL Hello World",NULL);
    	for(int x = 0;x < wscreen ;x++)
    	{
        	for(int y = 0;y < hscreen ;y++)
        	{
            	cube.x = x;
            	cube.y = y;
            	if(cube.x%32==0 && cube.y%32==0)
                	SDL_FillRect(screen, &cube, SDL_MapRGB(screen->format, x+y, 0, 0));
        	}
    	}
    
    	while(!done)
    	{
        	while(SDL_PollEvent(&event))
        	{
            	switch(event.type)
            	{
                	case SDL_QUIT:
                    	done = true;
                    	break;
                	case SDL_MOUSEMOTION:
                    	cube.x = event.motion.x, cube.y = event.motion.y;
                    	SDL_FillRect(screen, &cube, SDL_MapRGB(screen->format, 255, 0, 0));
                    	break;
            	}
        	}
        	SDL_UpdateRect(screen, 0, 0, 0, 0);
    	}
    
    	SDL_FreeSurface(screen);
    	SDL_Quit();
    	return 0;
    }
    

    Ich hoffer ihr versteht was ich meine. Ansonsten einfach sagen, ich versuch mich dann besser auszudrücken. 😃

    Liebe grüße, michi



  • Und wo liegt jetzt das Problem bzw. was genau ist deine Frage?



  • ich weiß nicht wie ich heraus finde wenn die position der maus in einem feld ist.



  • Die modulo-Operation ist doch schonmal gar nicht schlecht.

    Gridbreite 32 Pixel -> 0-31 = 0. Feld, 32-63 = 1. Feld usw. (0-basierter Index...)
    Je einmal für x und einmal für y.


Anmelden zum Antworten