Descargar imagenes en Pygame

Juan José Alonso. kernel.no.found en gmail.com
Mar Mayo 30 23:32:48 CEST 2006


como dijo antes otro pythonero, eso no existe ni deberia existir, te dare
una pequeña introduccion sobre el desarollo de ideojuegos o animaciones
usando pygame o cualquier otra libreria del mismo estilo. antes de seguir
decirte que se suele usar dos bufferes, o dos cajones como queramos
llamarlo, uno en memoria, y otro sera la memoria de la tarjeta grafica, todo
lo que depositemos en la tarjeta grafica sera enviado a monitor... entonces
necesitamos usar doble buffers, o dos memoria que es lo mismo. :) y supongo
que tu pregunta sera.. "valla forma de complicarse... ¿Porque no colocamos
todo en la memoria de video?" muy sencillo... si colocamos directamente
nuestras imagenes en la memoria de video las pintara al instante, esto es un
GRAN ERROR, te lo comentare con un ejemplo... como supongo que sabras el
monitor pinta pixel a pixel nuestra pantalla de arriba a abajo (esto se ve
muy bien si grabamos con una camara de video un televisor) cada pixel que
avanza pregunta a la memoria que color pintar alla... si vamos es de lo mas
seguro que coloquemos esas imagenes en memoria cuando la "linea pintora"
(perdon por las palabras pero no se como explicartelo) esta bajando por el
monitor y pintando (imagina las probabilidades, que tenemos poder pintarlas
cuando el monitor ha pintado ese "frame" y va a empezar por arriva de
nuevo...) lo cual seguramente pinte la mitad del monitor de la imagen
anterior y la otra mitad de la imagen nueva que le hemos pintado... en un
simple esquema seria esto:

1 PINTA EL FONDO DE UN ESCENARIO
2 (AQUI POR EJEMPLO EMPIEZA A PINTAR DE NUEVO EL MONITOR)
3 PINTA TODO EN NEGRO

ESTO ES MALO, PINTARA LA MITAD NEGRA Y LA OTRA DEL ESCENERIO, VEAMOS LO
CORRECTO CON DOBLE BUFFER:

1 PINTA ESCENARIO
2 VUELCA EL BUFFER PRIMERO AL SEGUNDO (MEMORIA DE VIDEO)
3 PINTA TODO NEGRO
4 VUELCA EL BUFFER PRIMERO AL SEGUNDO (MEMORIA DE VIDEO)

asi nuestras imagenes no se cortaran...


A esto le falta un RELOJ que administre los tiempos, supongo que te sonara
la palabra FPS (Frame per second) frames por segundo.. lo normal en un
videojuego es 40-50-60 frames por segundo para que no notemos nada raro, y
parezca movimiento real (Nuestro ojo le basta con 30fps, ya que no tiene
hardware para poder ver mas :P jejeje)

sabiendo estos conocimientos basicos veamos el codigo principal de un
videojuego en pseudocodigo seria algo asi:

importa librerias

declara funcion principal:
     carga_imagen1(imagen1.jpg)
    carga_imagen2(imagen2.jpg)
    #hemos cargado las imagenes que usaremos en la memoria.
  # ahora vamos a entrar en el bucle que se encargara de pintar, volcar
bufferes en pantalla todo el tiempo.
# antes definemos el reloj de actualizacion a 60fps:
reloj(60)
while 1:
    blit(imagen1, x1,y1)
    blit(imagen2, x2,y2)
    VuelcaBuffer()

este bucle se repetira unicamente 60 veces por segundo tal como lo dijimos
en el reloj....

practicamente eso es todo.. dentro del bucle es donde se deberia detectar
eventos para mover a los personajes etc.. simplemente evaluamos, si se
cumple el if, cambiariamos las cordenadas x1 e y1, o x2 e y2.... o nuestro
bucle se encargara de pintarlo segun esas variables... un juego es TODO un
bucle :)

estos son mis dos centimos a la comunidad de hoy :P

si quieres mas informacion sobre esto, en mi web
http://www.dotpy.net<http://dotpy.net>tengo varios enlaces a un curso
de pygame y python de linuxjuegos, asi como
tambien puedes usar el nuevo foro para preguntarme a mi o a Zapata que esta
programando un juego llamado PythonWars (lo puedes ver tambien en la forja
de proyectos y descargarlo, asi como si quieres usar la forja para tus
proyectos, o enviar tus articulos a portada sobre noticias o cualquier cosa

Foro Dotpy:
http://www.dotpy.net/forum/

Enviar articulos: http://dotpy.net/component/option,com_ja_submit/Itemid,36/

UN SALUDO! Y QUE TE SIRVA DE AYUDA !!


-- 
Juan José Alonso. KarlsBerg.
eMail: kernel.no.found en gmail.com
MSN: kernel.no.found en gmail.com




Más información sobre la lista de distribución Python-es