Voy a copiaros un código de lo que he hecho hasta ahora por aburrimiento. ADVIERTO QUE MI CÓDIGO NO SON MUY BUENOS.
Código
#include <SDL/SDL.h> #include <SDL/SDL_image.h> #include <SDL/SDL_ttf.h> #include <iostream> #include <fstream> #define Rojo {255,0,0} using namespace std; class interfaz { private: SDL_Surface *SFuente,*scrd; TTF_Font *TTFuente; SDL_Color Color; SDL_Rect Rect; char *Fuente; int interruptor; int tipo; // 1 boton 2 cuadro de texto public: interfaz(); void on(); void off(); int MouseOver(SDL_Event evento); int MouseClick(SDL_Event evento); int Mouse(SDL_Event evento); void CargarFuente(char *nombre); void ColorBoton(SDL_Surface *screen); void TextSelColor(int r,int g,int b); void Boton(char *texto,int size,int posx,int posy); void Texto(char *texto,int size,int posx,int posy); void Act(SDL_Surface *screen); }; interfaz::interfaz(){ interruptor=0; Color.r=0; Color.g=0; Color.b=0; }; void interfaz::on(){ interruptor=1; }; void interfaz::off(){ interruptor=0; }; int interfaz::MouseOver(SDL_Event evento){ if((evento.motion.x >= Rect.x-2 && evento.motion.x <= Rect.x+Rect.w+1) && (evento.motion.y >= Rect.y-2 && evento.motion.y <= Rect.y+Rect.h+3)){ on(); return 1; } else { off(); return 0; } }; int interfaz::MouseClick(SDL_Event evento){ if(MouseOver(evento)==1 && evento.button.button == SDL_BUTTON_LEFT){ return 1; } else return 0; }; int interfaz::Mouse(SDL_Event evento){ if(MouseClick(evento) ==1){ return 1; } else return 0; }; void interfaz::CargarFuente(char *nombre){ Fuente=nombre; }; void interfaz::ColorBoton(SDL_Surface *screen){ int r,g,b; if(interruptor==1){r=243;g=148;b=0;} else {r=0;g=0;b=0;} SDL_Rect x; x.x=Rect.x-1; x.y=Rect.y-1; x.w=Rect.w+2; x.h=Rect.h+2-(Rect.h/2); SDL_FillRect(screen,&x,SDL_MapRGB(screen->format,223,235,253)); x.y=x.y+x.h; SDL_FillRect(screen,&x,SDL_MapRGB(screen->format,212,230,255)); x.x=x.x-1; x.y=Rect.y-2; x.w=x.w+2; x.h=1; SDL_FillRect(screen,&x,SDL_MapRGB(screen->format,r,g,b)); x.y=Rect.y+Rect.h+3; SDL_FillRect(screen,&x,SDL_MapRGB(screen->format,r,g,b)); x.x=Rect.x-2; x.y=Rect.y-1; x.w=1; x.h=Rect.h+4; SDL_FillRect(screen,&x,SDL_MapRGB(screen->format,r,g,b)); x.x=Rect.x+Rect.w+1; SDL_FillRect(screen,&x,SDL_MapRGB(screen->format,r,g,b)); }; void interfaz::TextSelColor(int r,int g,int b){ Color.r=r; Color.g=g; Color.b=b; }; void interfaz::Boton(char *texto,int size,int posx,int posy){ tipo=1; TTFuente=TTF_OpenFont(Fuente, size); SFuente= TTF_RenderText_Blended(TTFuente,texto,Color); Rect.x=posx; Rect.y=posy; Rect.w=SFuente->w; Rect.h=SFuente->h; }; void interfaz::Texto(char *texto,int size,int posx,int posy){ tipo=2; TTFuente=TTF_OpenFont(Fuente, size); SFuente= TTF_RenderText_Blended(TTFuente,texto,Color); Rect.x=posx; Rect.y=posy; Rect.w=SFuente->w; Rect.h=SFuente->h; }; void interfaz::Act(SDL_Surface *screen){ if(tipo==1)ColorBoton(screen); SDL_BlitSurface(SFuente,0,screen,&Rect); }; //lineas rojas/////////// SDL_Rect h={0,0,640,1}; SDL_Rect v={0,0,1,480}; ///////////////////////// //color de fondo int br=0,bg=220,bb=0; ///////////////////////// int main(int argc,char *argv[]) { //Variables SDL_Surface *screen; SDL_Event evento;//Estructura evento int start; SDL_Init(SDL_INIT_VIDEO); screen=SDL_SetVideoMode(640,480,32,SDL_SWSURFACE); TTF_Init(); //FUENTE///////////////////////////////////////////// interfaz i; interfaz i2; interfaz i3; interfaz i4; //i.ini(screen); i.TextSelColor(0,0,0); i.CargarFuente("LCD.ttf"); i2.CargarFuente("LCD.ttf"); i3.CargarFuente("LCD.ttf"); i4.CargarFuente("arial.ttf"); i.Boton("Azul",24,50,50); i2.Boton("Verde",24,250,50); i3.Boton("Cerrar",12,400,400); i4.Texto("Texto",12,300,400); ///////////////////////////////////////////////////// while(1){ start=SDL_GetTicks(); if(start%25==0){ SDL_PollEvent(&evento);//devuelve 0 si no hay eventos v.x=evento.motion.x; h.y=evento.motion.y; if(evento.key.state==SDL_PRESSED){ if(evento.key.keysym.sym == SDLK_ESCAPE){ return 0; } } if(i.Mouse(evento) ==1){br=0;bg=0;bb=255;} if(i2.Mouse(evento) ==1){br=0;bg=255;bb=0;} if(i3.Mouse(evento) ==1)return 0; SDL_FillRect(screen,0,SDL_MapRGB(screen->format,br,bg,bb)); i.Act(screen); i2.Act(screen); i3.Act(screen); i4.Act(screen); SDL_FillRect(screen,&h,SDL_MapRGB(screen->format,255,0,0)); SDL_FillRect(screen,&v,SDL_MapRGB(screen->format,255,0,0)); SDL_Flip(screen); } } return 0; }
Esto es lo que llevo hasta el momento paso a explicar directamente el main() y ya me decis vuestra opinión.
Las lineas siguientes son para crear objetos.
Código
Esta linea es para darle color al texto
interfaz i; interfaz i2; interfaz i3; interfaz i4;
Código
Estas lineas son para cargar la fuente de texto de cada objeto
i.TextSelColor(0,0,0);
Código
Estas lineas son para crear un boton y un texto.
i.CargarFuente("LCD.ttf"); i2.CargarFuente("LCD.ttf"); i3.CargarFuente("LCD.ttf"); i4.CargarFuente("arial.ttf");
Código
y las lineas similares a
i.Boton("Azul",24,50,50); i2.Boton("Verde",24,250,50); i3.Boton("Cerrar",12,400,400); i4.Texto("Texto",12,300,400);
Código
Son para devolver información sobre el estado del raton
i.Mouse(evento)
A y las estas son para visualizar el objeto
Código
i.Act(screen);
Paso a decir un poco sobre algunas funciones de la clase.
esta funcion devuelve un valor si esta el raton encima del objeto.
Código
Y esta funcion devuelve un valor si el raton a pulsado click izquierdo encima del objeto.
MouseOver
Código
MouseClick
Me gustaría que me dierais vuesta opinión y tantos consejos como pudieran ser para aprender para próximas cosas.
Saludos