Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema Con Sdl

Iniciado por AlexHdez, 11 de Abril de 2004, 11:33:36 AM

« anterior - próximo »

AlexHdez

 Buenas:

Tengo un problema al programar un par de clases para SDL, la gracia del caso es poder escribir un texto en pantalla con una unica funcion que revele fuentes, colores, texto y coordenadas de impresion. No seais muy duros conmigo que soy muy novato please,  :(

Mi cabecera WriteText.h:

#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <SDL_ttf.h>

class WriteText

{

public:

WriteText(int Font, int Text, int FontSize, SDL_Surface dest, int x, int y, int w, int h, int FontColorR, int FontColorG, int FontColorB
 int FontBGColorR, int FontBGColorG, int FontBGColorB);
WriteText(TTF_Font Font, int Text, int FontSize, SDL_Surface dest, int x, int y, int w, int h, int FontColorR, int FontColorG, int FontColorB
 int FontBGColorR, int FontBGColorG, int FontBGColorB);

private:

TTF_Font LoadFont();
SDL_Color LoadFontColor();
SDL_Color LoadFontBGColor();
void BlitSurface();

};


Mi archivo fuente WriteText.cpp:

#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <SDL_ttf.h>
#include "WriteText.h"

WriteText::WriteText(int Font, int Text, int FontSize, SDL_Surface dest, int x, int y, int w, int h, int FontColorR, int FontColorG, int FontColorB
 int FontBGColorR, int FontBGColorG, int FontBGColorB)

{

LoadFont();
LoadFontColor();
LoadFontBGColor();
BlitSurface();

}

WriteText::LoadFont()

{

TTF_Font font = TTF_OpenFont(Font, FontSize);

return font;

}

WriteText::LoadFontColor()

{

SDL_Color color;

color.r = FontColorR;
color.g = FontColorG;
color.b = FontColorB;

return color;

}

WriteText::LoadFontBGColor()

{

SDL_Color bgcolor;

bgcolor.r = FontBGColorR;
bgcolor.g = FontBGColorG;
bgcolor.b = FontBGColorB;

return bgcolor;

}

WriteText::BlitSurface()

{

ttext = TTF_RenderText_Blended(font, Text, color, bgcolor);

SDL_Rect rectangle;

rectangle.x = x;
rectangle.y = y;
rectangle.w = w;
rectangle.h = h;

SDL_SetColorKey(ttext, SDL_COLORKEY | SDL_RLEACCEL, SDL_MapRGB(ttext->format,255,0,0));

SDL_BlitSurface(ttext, NULL, dest, &rectangle);

SDL_FreeSurface(ttext);

}


La idea es poder escribir un texto con algo asi:

WriteText prueba = WriteText(Fuente, "HolaMundo", 20, screen, 200, 200, 200, 200, 200, 200, 10, 255, 0, 0);

Muchas gracias de antemano

sés

 Cuando dices novato, ¿te refieres a SDL o a C? Lo digo porque se te ve bastante perdido.

La verdad es que nunca he usado texto en SDL (siempre me hago mis minifunciones de texto). Así que no puedo ayudarte con eso, pero puedo aconsejarte algo.

Si el código que pones está completo, no te va a funcionar nunca; constantemente haces referencia a variables que no están en ningún sitio.

Quizás deberías empezar por escribir un simple texto, sin preocuparte del color y sin hacer una función para ello. Cuando funcione ya te preocuparás de poder modificarle el color. Y cuando ya tengas todo claro, intenta hacer esa clase.

Paciencia. Si te ves muy mal puedo echar un vistazo a la librería esa para TTF.
Soy indeciso... ¿o no?

AlexHdez

 Mas bien novato en las dos, si, uno de los errores basicos que me da es que hago referencias a variables inexistentes, pero a ver, cuando yo hago la cabecera y creo las funciones con las variables en los parentesis no se crean? me refiero a esto:


WriteText(int Font, int Text, int FontSize, SDL_Surface dest, int x, int y, int w, int h, int FontColorR, int FontColorG, int FontColorB
int FontBGColorR, int FontBGColorG, int FontBGColorB);
WriteText(TTF_Font Font, int Text, int FontSize, SDL_Surface dest, int x, int y, int w, int h, int FontColorR, int FontColorG, int FontColorB
int FontBGColorR, int FontBGColorG, int FontBGColorB);


Ahi teoricamente creo todas esas variables no? y al estar en public: deberian ser accesibles no? Es que si estoy muy perdido, el problema no creo que sea la TTF sino mi bajo nivel de c++

Un saludo

BeRSeRKeR

 Las variables que pasas como parámetros a un método sólo son accesibles desde dicho método. Para tener variables accesibles en toda la clase, las tienes que declarar ya sea con public, private o protected en la propia clase.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

AlexHdez

 Bien, he corregido ese error, no me deja editar el primer post asi que copio el codigo cambiado:

WriteText.h

#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <SDL_ttf.h>

class WriteText

{

int Font;
int Text;
int FontSize;
SDL_Surface dest;
int x;
int y;
int w;
int h;
int FontColorR;
int FontColorG;
int FontColorB;
int FontBGColorR;
int FontBGColorG;
int FontBGColorB;
TTF_Font LFont;

public:

WriteText(Font, Text, FontSize, SDL_Surface dest, x, y, w, h, FontColorR, FontColorG, FontColorB
 FontBGColorR, FontBGColorG, FontBGColorB);
WriteText(LFont, Text, FontSize, SDL_Surface dest, x, y, w, h, FontColorR, FontColorG, FontColorB
 FontBGColorR, FontBGColorG, FontBGColorB);

private:

TTF_Font LoadFont();
SDL_Color LoadFontColor();
SDL_Color LoadFontBGColor();
void BlitSurface();

};


Eso me soluciona los errores de variables indefinidas pero no los de unexpected class, :S

Un saludo y muchisimas gracias

javiel

 Estas variables:


int Font;
int Text;
int FontSize;
SDL_Surface dest;
int x;
int y;
int w;
int h;
int FontColorR;
int FontColorG;
int FontColorB;
int FontBGColorR;
int FontBGColorG;
int FontBGColorB;
TTF_Font LFont;


deberían de estar dentro del bloque PUBLIC o PRIVATE. Normalmente deberían de ser PRIVATE y tener acceso a ellas desde funciones PUBLIC.

saludos
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

BeRSeRKeR

 Prueba a cambiar el nombre de la clase. Tal vez haya un conflicto de nombres...

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

ethernet

 eso es un error de un archivo anterior

Las variables por defecto son private

saludos

AlexHdez

 
Citareso es un error de un archivo anterior

No entiendo a que te refieres ethernet, de todas formas solo decir que de momento ningun otro archivo hace referencia a esa clase pues aun no he probado su uso pq no funcionaba, jeje, esos dos son los unicos archivos y estan completos... :S

Un saludo y mil gracias

sés

 Las funciones que tienes devuelven valores (font, color...), pero no haces nada con ellos. Según veo en tu código, me imagino que lo que deberías hacer es, en lugar de devolver esos datos (o además de devolverlos), guardarlos en las variables miembro de la clase.

De todas formas, como dices que estás verde con las dos cosas (C y SDL), te recomiendo que no te metas con las cos cosas a la vez.
Primero deberías conocer el funcionamiento de las clases y luego meterte con SDL.

Para SDL (y para todo en general) además te recomiendo que no intentes hacer directamente una clase que haga algo. Haz primero un programa simple:
int main( int argc, char **argv )
{
   // código de pruebas
}


Cando eso tan simple te funcione, ponlo en unas funciones en un fichero aparte, en una clase, en una DLL... donde mejor te venga.

Cuando estés más suelto (que nadie piense mal... (shit) :P) podrás hacer las cosas como estás intentando, o sea, directamente en clases.
Soy indeciso... ¿o no?

TheAzazel

 Estoy con ses....
creo q deberias empaparte mejor con C,C++ y una vez controlado todo... aprender SDL (q sabiendo lo anterior y los conceptos basicos de programacion es bastante sencillo) y ya te pones a hacer cosillas....
pero claro, sin pilotar de los dos...te pones con clases...normal q te lies jejeje
pos ahi kda eso....
saludos






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.