elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  SDL error!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SDL error!!  (Leído 1,969 veces)
Puntoinfinito


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
SDL error!!
« en: 2 Enero 2013, 21:22 pm »

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
  1. #include <iostream>
  2. #include <SDL/SDL.h>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.  
  8. //Iniciamos
  9. if (SDL_Init(SDL_INIT_VIDEO) < 0) {
  10. cout << "Error inesperado";
  11. cin.sync();
  12. cin.get();
  13. return 0;
  14. }
  15.  
  16. //Variables
  17. SDL_Surface *nave;
  18. SDL_Surface *fondo;
  19. SDL_Surface *screen;
  20. SDL_Rect *destino;
  21.  
  22. //Definir variables
  23. nave = SDL_LoadBMP("nave.bmp");
  24. fondo = SDL_LoadBMP("fondo.bmp");
  25.  
  26. //Creamos ventana
  27. screen = SDL_SetVideoMode(320, 240, 16 , SDL_HWSURFACE);
  28. if (screen == NULL) {
  29. cout << "Error inesperado";
  30. cin.sync();
  31. cin.get();
  32. SDL_Quit();
  33. return 0;
  34. }
  35.  
  36. //Nombre de ventana
  37. SDL_WM_SetCaption( "Nave", "Nave" );
  38.  
  39. //Dibujamos fondo
  40. destino->y = 0;
  41. destino->x = 0;
  42. SDL_BlitSurface(fondo, NULL, screen, destino);
  43.  
  44. //Dibujamos nave
  45. destino->y = 320 / 2;
  46. destino->x = 240 / 2;
  47. SDL_BlitSurface(nave, NULL, fondo, destino);
  48.  
  49. for (int i; i < 60; i++) {
  50. SDL_Flip(screen);
  51. SDL_Delay(1000);
  52. }
  53. SDL_Quit();
  54.  
  55. cin.sync();
  56. cin.get();
  57. return 0;
  58. }

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

Saludos


En línea

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



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

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Re: SDL error!!
« Respuesta #1 en: 7 Enero 2013, 15:28 pm »

Hola!!

Ya encontre uno de los errores.

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

Cambia esto:
Código:
SDL_BlitSurface(nave, NULL, fondo, destino);

Por:
Código:
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.

Código:
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!


En línea

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


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: SDL error!!
« Respuesta #2 en: 7 Enero 2013, 15:45 pm »

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;

Citar
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.

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!!
En línea

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



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

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Re: SDL error!!
« Respuesta #3 en: 11 Enero 2013, 04:35 am »

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!
En línea

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


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: SDL error!!
« Respuesta #4 en: 12 Enero 2013, 20:57 pm »

Espero las ayudas de hoy :)

Gracias!!
En línea

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



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines