SDL error!!

Iniciado por Puntoinfinito, 2 Enero 2013, 21:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Puntoinfinito

Hola, feliz año nuevo :D

He estado aprendiendo SDL, y quería comenzar ya mi primer juego, para eso he comenzado a practicar sin clases ni nada. Y lo primero que hago y mal... No se cual es el error, ya que creo que todo esta ya bien. El compilador tampoco me dice nada... Cuando lo abro, se cierra sin dar respuesta.

Código (sdlbasic) [Seleccionar]
#include <iostream>
#include <SDL/SDL.h>

using namespace std;

int main() {

//Iniciamos
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
cout << "Error inesperado";
cin.sync();
cin.get();
return 0;
}

//Variables
SDL_Surface *nave;
SDL_Surface *fondo;
SDL_Surface *screen;
SDL_Rect *destino;

//Definir variables
nave = SDL_LoadBMP("nave.bmp");
fondo = SDL_LoadBMP("fondo.bmp");

//Creamos ventana
screen = SDL_SetVideoMode(320, 240, 16 , SDL_HWSURFACE);
if (screen == NULL) {
cout << "Error inesperado";
cin.sync();
cin.get();
SDL_Quit();
return 0;
}

//Nombre de ventana
SDL_WM_SetCaption( "Nave", "Nave" );

//Dibujamos fondo
destino->y = 0;
destino->x = 0;
SDL_BlitSurface(fondo, NULL, screen, destino);

//Dibujamos nave
destino->y = 320 / 2;
destino->x = 240 / 2;
SDL_BlitSurface(nave, NULL, fondo, destino);

for (int i; i < 60; i++) {
SDL_Flip(screen);
SDL_Delay(1000);
}
SDL_Quit();

cin.sync();
cin.get();
return 0;
}


¿Qué le pasa? Tal vez tengo que indicar medidas de los objetos a la hora de hacer BlitSurface, o qué?

Saludos
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

Anastacio

Hola!!

Ya encontre uno de los errores.

Cuando haces un blit, para poner el Rect debe ir con un &.

Cambia esto:

SDL_BlitSurface(nave, NULL, fondo, destino);


Por:

SDL_BlitSurface(nave, NULL, fondo, %destino);



En SetCaption el segundo valor es el icono de 32 x 32 que debe ir como un Surface . El "Nave" en el segundo parametro tambien ha de causar problemas.

Otra cosa. Me parece que te faltan dos valores de las ubicaciones. En SDL, un rect tiene cuatro valores. x y y es la esquina izquierda superior de el rect. w y h es la esquina inferior derecha.


flechitar.x = 400;
flechitar.y = 450;
flechitar.w = flechita->w;
flechitar.h = flechita->h;



Y ahora algo que yo no entiendo de tu code. Porque divides los valores de X y Y en la nave?

Y lo mejor seria que lo blitees todo en el screen, en vez de hacerlo en el fondo y luego en el screen, es lio al..., ademas en todo caso si lo haces asi deberia ser alreves, primero bliteas la nave, luego el fondo. Pero yo te lo recomiendo que hagas el blit directo al screen. Te evitaras problemas mas adelante. Yo he hecho juegos simples en SDL, pero nada complicado.

Nota, puedo estar errado en alguna de esas cosas, pero simplemente prueba y luego nos avisas.

Saludos!
You, stop to close my post, you were novice too!!!!!!!!!!!!

Puntoinfinito

Hola!! Que emoción alguien me ha respondido!! Era hora  ;-)

He cambiado lo de los punteros y demás y ahora ya no sale "Core dumped", ahora lo que pasa es que no sale el fondo ni la nave.

Los valores de X y Y de nave estan divididos para que el objeto sea dibujado exactamente en la mitad de la ventana.

Otra cosa;

CitarOtra cosa. Me parece que te faltan dos valores de las ubicaciones. En SDL, un rect tiene cuatro valores. x y y es la esquina izquierda superior de el rect. w y h es la esquina inferior derecha.

Código:

flechitar.x = 400;
flechitar.y = 450;
flechitar.w = flechita->w;
flechitar.h = flechita->h;

Esto según lo que he leído, no hace falta declarar :), pero puedo estar totalmente equivocado.

Mira, si quieres te dejo un comprimido con sus objetos reales para que veas si en lo que estoy equivocado, es en la manera que declaro los objetos para escribirlos en pantalla.

Descarga nave.tar.gz

Gracias por responder!!
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

Anastacio

Hola

Ahora tengo mucho sueño y me estoy por ir a dormir, en argentina son 12>30. A ver, vamos a ir retocando todo. Primero, lo que te recomiendo es que a la ventana la abras con un doble buffer, en los parametros de setvideomode, va al lado de HWSurface y se separan con una barra vertical. Eso podria estar generandote problemas con el flip.

Eh..., otra cosa, creeria que deberias poner cada sprite *imagen* en un rect diferente.

Para usar la funcion Delay debes colocar en los parametros no solo el modo video sino tambien el de TIMER.

Mañana te ayudo todo lo posible, a esta hora solo lei el codigo de nuevo. Saludos!
You, stop to close my post, you were novice too!!!!!!!!!!!!

Puntoinfinito

Espero las ayudas de hoy :)

Gracias!!
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.