Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   programacion con sdl (https://www.clubdelphi.com/foros/showthread.php?t=61117)

anubis 26-10-2008 17:03:02

programacion con sdl
 
Buenas, No se si es el sitio adecuado para poner una pregunta sobre sdl pero la verdad es que estoy intentando programar un juego para niños con la libreria sdl y de momento ya he puesto los graficos y algunas cosas mas, no parece complicado.
La cuestion es que van saliendo unas letras que se mueven y van formando la palabra, lo que pasa es que al moverse van dejando una estela bastante molesta, se supone que esto se hace alternando el fondo de pantalla con el sprite, pero lo que ocurre es que las letras que ya han salido desaparecen.
En resumen, nose si se puede hacer copiando el contenido de la pantalla despues de que vayan saliendo las letras.......

Alguna idea?

y mis disculpas si este tema del sdl no va aqui.

gracias

xEsk 26-10-2008 20:30:53

Debes montarte un "motor" de sprites.

A grandes rasgos, la idea es:

1) Pintar el fondo.
2) Pintar uno a uno los sprites (empezar por los que estan mas alejados).
3) Dibujar la imagen "temporal" en la pantalla.

Asi pues, en cada "refresco" de pantalla, se ejecuta el procedimiento encargado de pintar los sprites. Luego hay tecnicas, para evitar parpadeos, como el DoubleBuffering.

El DoubleBuffering, consite en tener 2 imagenes:
1) Pintas en la imagen 1, mientras muestras la imagen 2
2) Pintas en la imagen 2, mientras muestras la imagen 1
3) Goto 1)

Hay por ahí, muchos engines para gestionar los Sprites (un ejemplo).

Saludos.

anubis 27-10-2008 00:12:53

Se agradece la respuesta, mas o menos lo intento entender, pense que era mas facil como copiar la pantalla y refrescarla, pero lo del temporal no lo agarro bien, si bien es cierto, si es que lo entendi bien, es guardar la posicion de las figuras que van saliendo mientras se mueven, para ir colocandolas despues de haber pintado el fondo, asi que simplemente lo tengo que guardar antes de repintar.

Estoy empezando con el sdl pero veo que me falta muchisimo y para delphi no hay tutoriales salvo el de delphi al limite.

gracias de nuevo, y si puedes darme algun ejemplo mas concreto aparte de la pagina que me menciionas, te lo agradeceria.

xEsk 27-10-2008 01:56:41

Hola,

Imagino que te refieres a este SDL xD

Los Sprites
Los sprites, son "dibujos" independientes. En tu caso, por poner un ejemplo, cada letra seria un sprite. Este debe conocer su posición y dibujo.

Motor de Sprites
Su tasca principal, es conocer todos los sprites que se deben mostrar por pantalla, y pintarlos. ¿Cómo sabemos que sprites hay que pintar primero? Pues por su orden de profundidad (campo Z).
Así pues, lo primero que tenemos que pintar es el fondo (que no deja de ser otro sprite), porque todo va a estar por encima del fondo. Luego hay que pintar los sprites, empezando por los que estan "mas lejos" y terminando, por los que estan delante de todo.

Te pongo un ejemplo sencillo abstracto:

Código:

Clase Sprite {
  x,y,z;
  dibujo;  // lo que seria el SDL_Surface por ejemplo
}

Clase MotorSprites {
  lista de Sprites;
  pintar_sprites(); // metodo que pinta todos los sprites
}

El DoubleBuffering
El DoubleBuffering, consite en tener 2 imagenes, que se muestran de forma intercalada. ¿Que ganamos haciendo esto? Pues evitar el parpadeo. El parpadeo ocurre por la lentidud de volcado en pantalla. El porqué el DoubleBuffering no provoca parpadeo (o una menor sensación de parpadeo, porqué existe también el TripleBuffering xD), es porqué mientras estamos mostrando una imagen, por "detras" estamos generando lo que sera la siguiente imagen.

------------

Es complicado explicarlo, sin entrar en temas tecnicos. Mi intención es explicarte la teoria, para que puedas montartelo como mas te guste.

------------

Mi recomendación, es primero montarte el sistema de Sprites. Cuando ya te funcione, puedes mejorarlo, implementando la tecnica del DoubleBuffering.

Delphius 27-10-2008 02:43:17

Hola anubis,
No estoy puesto en el tema, pero hace un tiempo he estado siguiendo la lectura de Delphi al límite. Su autor habló al respecto en 10 entregas. Si todavía no lo leíste, tal vez te sea útil. Aquí te paso el enlace.

Saludos,

anubis 29-10-2008 17:56:58

Gracias a los dos, ;). Delphi al limite si lo vi, pero me faltaba saber que tengo que capturar cada vez que sale algo en la pantalla, en mi caso letras, tengo que ir guardando cada una de ellas mientras redibujo el fondo, y redibujo cada una de las letras que han ido saliendo, lioso pero valido ;).
Pense que se podia capturar la pantalla completa y luego recolocarla, pero veo que si trabajas con altas resoluciones es casi imposible por la memoria no es asi?.

gracias de nuevo


La franja horaria es GMT +2. Ahora son las 00:58:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi