Bucle no cumple con su cometido o algo falla.

Ver el tema anterior Ver el tema siguiente Ir abajo

Bucle no cumple con su cometido o algo falla.

Mensaje por OmarHack el Jue Jun 06, 2013 8:35 am

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

}
avatar
OmarHack
Admin

Mensajes : 79
Fecha de inscripción : 30/05/2013

Ver perfil de usuario http://programacion.eclipseforo.com

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por amchacon el Jue Jun 06, 2013 10:57 am

A mí ese ejemplo me funciona de maravilla *_*
avatar
amchacon
Admin

Mensajes : 171
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por kaltorak el Jue Jun 06, 2013 2:39 pm

Ups!!

A mi también me funciona, cual se supone que es el error ??

Un saludo
kaltorak.

_________________

avatar
kaltorak
Admin

Mensajes : 178
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por dato000 el Jue Jun 06, 2013 3:20 pm

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??

_________________


Así es, pura evolución
Para pasar el tiempo: [Tienes que estar registrado y conectado para ver este vínculo]
avatar
dato000
Admin

Mensajes : 161
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por amchacon el Jue Jun 06, 2013 7:07 pm

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.
avatar
amchacon
Admin

Mensajes : 171
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por OmarHack el Jue Jun 06, 2013 8:43 pm

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.
avatar
OmarHack
Admin

Mensajes : 79
Fecha de inscripción : 30/05/2013

Ver perfil de usuario http://programacion.eclipseforo.com

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por OmarHack el Jue Jun 06, 2013 9:15 pm

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...
avatar
OmarHack
Admin

Mensajes : 79
Fecha de inscripción : 30/05/2013

Ver perfil de usuario http://programacion.eclipseforo.com

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por amchacon el Jue Jun 06, 2013 9:55 pm

¿Mismo código? ¿En windows 7?
avatar
amchacon
Admin

Mensajes : 171
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por OmarHack el Jue Jun 06, 2013 11:57 pm

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.
avatar
OmarHack
Admin

Mensajes : 79
Fecha de inscripción : 30/05/2013

Ver perfil de usuario http://programacion.eclipseforo.com

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por amchacon el Vie Jun 07, 2013 12:11 am

OmarHack 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.
Ah entonces es un error de linkado Very Happy

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".
avatar
amchacon
Admin

Mensajes : 171
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por OmarHack el Vie Jun 07, 2013 1:38 am

Mire con el debugger de devc++ y me da: Segmentation fault
A saber por que es '--
avatar
OmarHack
Admin

Mensajes : 79
Fecha de inscripción : 30/05/2013

Ver perfil de usuario http://programacion.eclipseforo.com

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por amchacon el Vie Jun 07, 2013 4:36 pm

Mala instalación de las SDL (ya sea la librería o la dll/runtime).

El código funciona perfectamente.
avatar
amchacon
Admin

Mensajes : 171
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por kaltorak el Vie Jun 07, 2013 4:42 pm

Prueba a desinstalarlo todo y empezar de cero hay veces que así se solucionan problemas extraños.

_________________

avatar
kaltorak
Admin

Mensajes : 178
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por OmarHack el Vie Jun 07, 2013 10:17 pm

Dudo que sea eso, porque instalé de distinta manera en devcpp y codeblocks, Ya sería mala suerte equivocarme en los 2.
avatar
OmarHack
Admin

Mensajes : 79
Fecha de inscripción : 30/05/2013

Ver perfil de usuario http://programacion.eclipseforo.com

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por amchacon el Vie Jun 07, 2013 10:22 pm

OmarHack escribió:Dudo que sea eso, porque instalé de distinta manera en devcpp y codeblocks, Ya sería mala suerte equivocarme en los 2.
Tiene que ser la instalación sí o sí, el código es correcto.
avatar
amchacon
Admin

Mensajes : 171
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por OmarHack el Sáb Jun 08, 2013 11:28 am

Tengo que revisarlo con calma, solo incluyo sdl, no puede estar mal en los 2 xDDD
avatar
OmarHack
Admin

Mensajes : 79
Fecha de inscripción : 30/05/2013

Ver perfil de usuario http://programacion.eclipseforo.com

Volver arriba Ir abajo

:o

Mensaje por ivancea el Sáb Jun 08, 2013 2:00 pm

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

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por OmarHack el Sáb Jun 08, 2013 4:30 pm

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.
avatar
OmarHack
Admin

Mensajes : 79
Fecha de inscripción : 30/05/2013

Ver perfil de usuario http://programacion.eclipseforo.com

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por kaltorak el Sáb Jun 08, 2013 4:43 pm


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.

_________________

avatar
kaltorak
Admin

Mensajes : 178
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por kaltorak el Sáb Jun 08, 2013 5:03 pm

Aquí te pongo el código un poco modificado a ver si así te 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;
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.

_________________

avatar
kaltorak
Admin

Mensajes : 178
Fecha de inscripción : 30/05/2013

Ver perfil de usuario

Volver arriba Ir abajo

Re: Bucle no cumple con su cometido o algo falla.

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.