Bucle no cumple con su cometido o algo falla.
5 participantes
Página 1 de 1.
Bucle no cumple con su cometido o algo falla.
En este código simple el bucle que espera a que se pulse una tecla antes de salir no funciona '--
- Código:
#include <iostream>
#include <SDL/SDL.h>
using namespace std;
void crearCuadrado (SDL_Surface *screen, int ,int);
int anchoPantalla = 800; //Da un valor al ancho de la pantalla
int altoPantalla = 400; //Da un valor al alto de la pantalla
int mitadResolucionPantalla = anchoPantalla / 2; //Pone el cuadrado en la mitad (centra horizontalmente) de la pantalla
int mitadResolucionPantalla2 = altoPantalla / 2; //Pone el cuadrado en la mitad (centra verticalmente) de la pantalla
int posicionActualDelCuadradoEnPixeles = mitadResolucionPantalla2;
int main(int argc, char *argv[]) {
SDL_Surface *image, *screen;
SDL_Event event;
int done = 0;
atexit(SDL_Quit);
// Iniciar SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
cout << "No se pudo iniciar SDL" << endl << SDL_GetError();
exit(1);
}
// Activamos modo de video
screen = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
if (screen == NULL) {
cout << "No se puede inicializar el modo gráfico" << endl << SDL_GetError();
exit(1);
}
crearCuadrado(screen,1,1);
// Mostramos la pantalla
SDL_Flip(screen);
// liberar superficie
SDL_FreeSurface(image);
// Esperamos la pulsación de una tecla para salir pero no funciona
while(done == 0) {
while ( SDL_PollEvent(&event) ) {
if ( event.type == SDL_KEYDOWN )
done = 1;
}
}
return 0;
}
void crearCuadrado (SDL_Surface *image, int x1, int y1) //Función para pintar el cuadrado en pantalla
{
SDL_Rect rect = {mitadResolucionPantalla , posicionActualDelCuadradoEnPixeles, 25, 25};
Uint32 a = SDL_MapRGB(image->format, 250, 250, 0);
SDL_FillRect(image, &rect, a); //Rellena (Pinta) el cuadrado
SDL_UpdateRect(image, rect.x, rect.y, rect.w, rect.h);
//Vuelve a pintar el cuadrado en pantalla tras realizar algún movimiento
}
Re: Bucle no cumple con su cometido o algo falla.
A mí ese ejemplo me funciona de maravilla *_*
amchacon- Admin
- Mensajes : 171
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
Ups!!
A mi también me funciona, cual se supone que es el error ??
Un saludo
kaltorak.
A mi también me funciona, cual se supone que es el error ??
Un saludo
kaltorak.
kaltorak- Admin
- Mensajes : 178
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
Les funciona?? a mi apenas me sale un parpadeo, como todavia estoy aprendiendo, pues me remito a uds, para saber las causas de ese: "Segmentatio Fault"
en allegro era un problema de resoluciones o de imagenes, pero en SDL que podria ser??
en allegro era un problema de resoluciones o de imagenes, pero en SDL que podria ser??
dato000- Admin
- Mensajes : 161
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
En linux también me funciona.
Segmentation fault quiere decir que te has intentado acceder a memoria que no te correspondia, probablemente producida por un puntero no inicializado o con valor NULL.
En allegro si la imagen no se carga bien devuelve un puntero NULL, de ahí que salga segmentation fault.
Segmentation fault quiere decir que te has intentado acceder a memoria que no te correspondia, probablemente producida por un puntero no inicializado o con valor NULL.
En allegro si la imagen no se carga bien devuelve un puntero NULL, de ahí que salga segmentation fault.
amchacon- Admin
- Mensajes : 171
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
A mi me desaparece y no me da ningún fallo. Creo que es fallo del devc++, voy a instalar las librerías en codeblocks y os cuento.
Re: Bucle no cumple con su cometido o algo falla.
Sigue en las mismas, al abrir el ejecutable o al compilar y ejecutar me desaparece al momento y no espera a que yo pulse ninguna tecla...
Re: Bucle no cumple con su cometido o algo falla.
¿Mismo código? ¿En windows 7?
amchacon- Admin
- Mensajes : 171
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
Sí, Windows 7 Ultimate, estes son mis pasos: Copiar de mi mismo comentario, pegar en Devc++ y compilar tanto en modo consola como ventana.
Copiar otra vez de mi comentario, pegar en Codeblocks y compilar tanto en modo consola como ventana. Revisar en las 4 ejecuciones los archivos que se crean para mostrar los fallos y todos ellos en blanco.
A no ser que sea algo de hardware y haya un bug en SDL no lo entiendo... A unos nos funciona y a otros no.
Copiar otra vez de mi comentario, pegar en Codeblocks y compilar tanto en modo consola como ventana. Revisar en las 4 ejecuciones los archivos que se crean para mostrar los fallos y todos ellos en blanco.
A no ser que sea algo de hardware y haya un bug en SDL no lo entiendo... A unos nos funciona y a otros no.
Re: Bucle no cumple con su cometido o algo falla.
Ah entonces es un error de linkadoOmarHack escribió:Sí, Windows 7 Ultimate, estes son mis pasos: Copiar de mi mismo comentario, pegar en Devc++ y compilar tanto en modo consola como ventana.
Copiar otra vez de mi comentario, pegar en Codeblocks y compilar tanto en modo consola como ventana. Revisar en las 4 ejecuciones los archivos que se crean para mostrar los fallos y todos ellos en blanco.
A no ser que sea algo de hardware y haya un bug en SDL no lo entiendo... A unos nos funciona y a otros no.
Codeblocks/Devcpp no puede detectar los errores de linkado porque la compilación termina correctamente, prueba a darle en su lugar a "reconstruir todo". Seguro que encontrarás errores (sin resaltar en rojo) del estilo "undefinided reference to xxx".
amchacon- Admin
- Mensajes : 171
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
Mire con el debugger de devc++ y me da: Segmentation fault
A saber por que es '--
A saber por que es '--
Re: Bucle no cumple con su cometido o algo falla.
Mala instalación de las SDL (ya sea la librería o la dll/runtime).
El código funciona perfectamente.
El código funciona perfectamente.
amchacon- Admin
- Mensajes : 171
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
Prueba a desinstalarlo todo y empezar de cero hay veces que así se solucionan problemas extraños.
kaltorak- Admin
- Mensajes : 178
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
Dudo que sea eso, porque instalé de distinta manera en devcpp y codeblocks, Ya sería mala suerte equivocarme en los 2.
Re: Bucle no cumple con su cometido o algo falla.
Tiene que ser la instalación sí o sí, el código es correcto.OmarHack escribió:Dudo que sea eso, porque instalé de distinta manera en devcpp y codeblocks, Ya sería mala suerte equivocarme en los 2.
amchacon- Admin
- Mensajes : 171
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
Tengo que revisarlo con calma, solo incluyo sdl, no puede estar mal en los 2 xDDD
:o
Soy nuevo y no se mucho, pero quizás te decsargaste SDL de mal lugar? o incompleto? No se, por proponer ideas xD
ivancea- Mensajes : 9
Fecha de inscripción : 06/06/2013
Re: Bucle no cumple con su cometido o algo falla.
No creo, además compilar compila, asique al abrir directamente el ejecutable con poner la librería sdl en la misma carpeta funciona. Y no las quiere. '--
Lo probé en una máquina virtual y hace lo mismo. Tiene que ser de mi hardware.
Lo probé en una máquina virtual y hace lo mismo. Tiene que ser de mi hardware.
Re: Bucle no cumple con su cometido o algo falla.
Te funcionan los Minijuegos que yo he hecho???
Porque si te funcionan esos MiniJuegos no es del hardware porque están hechos de la misma manera que tu codigo más o menos.
kaltorak- Admin
- Mensajes : 178
Fecha de inscripción : 30/05/2013
Re: Bucle no cumple con su cometido o algo falla.
Aquí te pongo el código un poco modificado a ver si así te funciona
Y aquí tienes el código compilado para que veas si es un problema de compilación o no.
Binario: [Tienes que estar registrado y conectado para ver este vínculo]
Un saludo
Kaltorak.
- Código:
#include <iostream>
#include <SDL/SDL.h>
using namespace std;
void crearCuadrado (SDL_Surface *screen, int ,int);
int anchoPantalla = 800; //Da un valor al ancho de la pantalla
int altoPantalla = 400; //Da un valor al alto de la pantalla
int mitadResolucionPantalla = anchoPantalla / 2; //Pone el cuadrado en la mitad (centra horizontalmente) de la pantalla
int mitadResolucionPantalla2 = altoPantalla / 2; //Pone el cuadrado en la mitad (centra verticalmente) de la pantalla
int posicionActualDelCuadradoEnPixeles = mitadResolucionPantalla2;
int main(int argc, char *argv[]) {
SDL_Surface *image, *screen;
SDL_Event event;
bool done = false;
atexit(SDL_Quit);
// Iniciar SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
cout << "No se pudo iniciar SDL" << endl << SDL_GetError();
exit(1);
}
// Activamos modo de video
screen = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
if (screen == NULL) {
cout << "No se puede inicializar el modo gráfico" << endl << SDL_GetError();
exit(1);
}
crearCuadrado(screen,1,1);
// Mostramos la pantalla
SDL_Flip(screen);
// liberar superficie
SDL_FreeSurface(image);
// Esperamos la pulsación de una tecla para salir pero no funciona
while (!done)
{
/*Comprobamos los eventos del sistema para comprobar si la ventana a sido cerrada o si se
pulsa escape en caso de que asi sea ponemos El valor true en done para que finalice la
ejecucion del programa.*/
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
{
done = true;
break;
}
case SDL_KEYDOWN:
{
if (event.key.keysym.sym == SDLK_ESCAPE)
done = true;
break;
}
}
}
}
return 0;
}
void crearCuadrado (SDL_Surface *image, int x1, int y1) //Función para pintar el cuadrado en pantalla
{
SDL_Rect rect = {mitadResolucionPantalla , posicionActualDelCuadradoEnPixeles, 25, 25};
Uint32 a = SDL_MapRGB(image->format, 250, 250, 0);
SDL_FillRect(image, &rect, a); //Rellena (Pinta) el cuadrado
SDL_UpdateRect(image, rect.x, rect.y, rect.w, rect.h);
//Vuelve a pintar el cuadrado en pantalla tras realizar algún movimiento
}
Y aquí tienes el código compilado para que veas si es un problema de compilación o no.
Binario: [Tienes que estar registrado y conectado para ver este vínculo]
Un saludo
Kaltorak.
kaltorak- Admin
- Mensajes : 178
Fecha de inscripción : 30/05/2013
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.