Anuncios Google

Borrar Imagenes SDL

hola a todos,

Bueno hace tiempo que no escribo por aqui pero me puse a hacer un juego muy primitivo en SDL, y lo que pasa es que no se como hacer para borrar imagenes para poner otra,

He pensado poner las otras encima de esta pero tendria que estar poniendo graficos sin parar. Tambie pense en poner esto:
SDL_FreeSurface(image);

Pero la imagen no se borraba.

Espero que me podais ayudar.

 

Gracias

Edit-----

Aprovecho mi duda para preguntar como leer archivos externos y que el porgrama los reconozca. Esque cuando pongo me escriba en el fichero una palabra, pues me gustaria que alguien me fijese como hacer para que el programa reconociese la palabra o solo una variable.

 

Gracias de nuevo.


Mi blog: adriel0000.wordpress.com

 

un saludo.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

Borrar imágenes

Para "borrar" una imagen la única manera es sobreescribir, bien poniendo otra imagen encima o haciendo un sdl_fillrect. Ten en cuenta que la pantalla es al fin y al cabo una matriz 2D, así que la única manera de borrar es decirle a SDL con qué color quieres borrar para sustituir los valores por ese color.

Sobre la pregunta de los archivos, no he entendido ni papa xD. Explícamelo mejor, a ver si te puedo ayudar.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de adriel0000

Osea

Osea que sustituyo la imagen en la misma surface?

 

respecto a lo otro es que quiero enviar una variable a un archivo de texto y c me reconozca la variable.

 

Saludos y gracias.


Mi blog: adriel0000.wordpress.com

 

un saludo.

Imagen de joserc87

Si te entiendo bien

Lo que quieres hacer es pintar un dibujo en pantalla y luego borrarlo no? Pues si lo dibujas sobre un fondo negro, para borrarlo solo tienes que dibujar un rectángulo negro sobre el dibujo. Si el fondo es otra imagen, vuelves a dibujar el fondo*.

Lo de escribir en ficheros, si lo haces en C++ es mucho más fácil.

int unEntero;
char unChar;
struct TipoEstructura{
  friend std::ostream & operator<<(std::ostream &os, const TipoEstructura& p);
} unaEstructura;
 
ofstream fo;
fo.open ("Un archivo.txt");
if (!fo)
  cout << "ERROR: el archivo no se ha podido abrir\n";
else{
  fo << unEntero << unChar << unaEstructura;
}
 
// Y si lo quieres guardar como un archivo binario sería:
fo.write (&unEntero, sizeof(int))
fo.write (&unEntero, sizeof(char))
fo.write (&unaEstructura, sizeof (TipoEstructura))

Si lo organizas todo en clases e implementas el operator << te será muy fácil.

*Nota. Hay una forma más eficiente que dibujar el fondo completo. Cuando avances más mírate "dirty rectangles", pero por ahora te vale con la opción ineficiente.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de adriel0000

Mi problema

Mi problema no es escribir en un archivo, es que el programa reconozca que hay pone por ejemplo. int nivel = 1; y ponga la varibale en 1. Osea para guardar partidas y eso.


Mi blog: adriel0000.wordpress.com

 

un saludo.

Imagen de joserc87

Esa no es la forma.

Si fueses a hacer un compilador o un intérprete sí tendrías que analizar ese tipo de código, pero para una partida de un juego no hace falta que pongas el código en el fichero! Analizar código es algo más complicado que leer un simple fichero.

Te voy a poner un ejemplo sencillo: Si quisieses guardar la partida de un 3 en Raya guardarías 9 enteros (un entero por cada casilla) donde pones -1 si es una X, 1 si es un O o 0 si la casilla está vacía. Para un juego más complicado, como un juego de coches, guardarías en un fichero binario:

3 floats: (posición (x,y,z) del coche)
3 floats: (velocidad del coche (vx, vy, vz))
2 floats: (ángulo)
1 entero: estado del coche
1 string: nombre del conductor

Y así con cada dato del coche que quieras guardar. Si tieness más de un coche, guardas primero el número de coches, y luego los datos de cada coche...

Es un ejemplo muy abstracto. Si me dices que es exáctamente lo que quieres hacer y los datos que tienes te puedo ayudar un poquito más.

Saludos


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de adriel0000

Vale

Vale te ecplico, yo quiero guardar las variables:

int Nivel; // 0=No empezo la partida

int Sala; //""

char Nombredeljugador; // en blanco= no a empezado la partida

int x; // 100

int y; // 100

 

entonces quiero guardar esas variables en algun sitio para que cuando esa persona vuelva a abrir el juego esas variables las cargue y se pongan como se quedaron la ultima vez que se guardo.

Espero haberme explicado xD.

Gracias


Mi blog: adriel0000.wordpress.com

 

un saludo.

Imagen de joserc87

Vale

Entonces para guardar sería, en un archivo binario:

ofstream fo;
fo.open ("partida.txt", ios::binary);
if (!fo){
  cout << "El archivo no se puede abrir\n";
  exit(-1);
}
fo.write ((char*)&Nivel, sizeof (int));
fo.write ((char*)&Sala, sizeof (int));
int longCadena=strlen (NombredelJugador);
fo.write ((char*)&longCadena, sizeof (int));
fo.write (&NombredelJugador, sizeof (char)*longCadena);
fo.write ((char*)&x, sizeof (int));
fo.write ((char*)&y, sizeof (int));
fo.close();

y para leerlo, lo mismo:

ifstream fi;
fi.open ("partida.txt", ios::binary);
if (!fi){
  cout << "El archivo no se puede abrir\n";
  exit(-1);
}
fi.read ((char*)&Nivel, sizeof (int));
fi.read ((char*)&Sala, sizeof (int));
int longCadena=0;
fi.read ((char*)&longCadena, sizeof(int))
fi.read (&NombredelJugador, sizeof (char)*longCadena);
fi.read ((char*)&x, sizeof (int));
fi.read ((char*)&y, sizeof (int));
fi.close ()

NOTA: Supongo que cuando has puesto

char Nombredeljugador;

Querías decir

char Nombredeljugador [X];

no? Si el nombre del jugador es solo un caracter tendría que cambiarlo un poquito.

Saludos


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de adriel0000

Claro

Claro, muchas gracias unicamente queria leer el codigo y comprenderlo. Ahora me toca toquetearlo y investigarlo.

 

EDIT---

Jose, Gracias por todo simpre estas para ayudarme.

Y gracias a ti dioni por darme ese consejo.

Un saludo y gracias


Mi blog: adriel0000.wordpress.com

 

un saludo.

Imagen de Dioni0396

Para que gastar

tanta memoria, en las x,y, Nivel y Sala

Yo lo haria asi:

s16 Nivel; // 0=No empezo la partida
 
s16 Sala; //""
 
char Nombredeljugador; // en blanco= no a empezado la partida
 
s16 x; // 100
 
s16 y; // 100

Un saludo

Imagen de joserc87

Tampoco hace falta apurar tanto

Por ahorrarse unos bytes, a no ser que tengas muy poca memoria (si estás programando un microcontrolador por ejemplo)

Además, si pones x=s16, te puedes quedar corto si luego el mapa tiene más de 2^16 posiciones. Bueno, igual 2^16 parece muchísimo, pero en un mapa real luego tampoco es tanto 65536 positiones... Ya depende de lo que quiera hacer.

Yo seguiría el consejo de Dioni, pero solo para vectores y matrices grandes. Por ejemplo si tienes una matriz de enteros de tamaño 1024x1024, para qué usar un int si a lo mejor un "unsigned char" (byte) te sirve. Pasaría de ocupar 4 u 8MB (dependiendo del compilador) a 1MB. Pero para variables aisladas no merece la pena...


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de Dioni0396

Cierto

que se puede quedar corto, pero no creo que esas variables pasen del numero 32000 (Aprox)

Tenia pensado poner u8, pero por si acaso puse s16

Imagen de adriel0000

Vale

Vale esque como solo uso int, float y chars pues nunca los pongo pero seguire tu consejo, gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.