SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
Curso de: Programacion de Juegos con PyGame
     Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com




   Programación de Juegos
        con PyGame
Capitulo 1: Nociones Básicas




1
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com



Introducion
       La mayoría de las personas que han pasado por áreas relacionados con la
programación, se han preguntado alguna vez: ¿Cómo se hace un video juego?, ¿Qué tienen
que saber? ¿Por donde empezar? y muchas preguntas más. Muchos han intentado hacerlo
sin resultado alguno, otros en cambio han podido crear sus primeros juegos con un poco de
esfuerzo, pero aun así siempre quedan preguntas pendientes por responder y bastante por
aprender.

       En este tutorial pretendemos ayudarlos a resolver varias de sus dudas sobre el
desarrollo de juegos. Para comenzar en el desarrollo de video juegos es preferible hacerlo
con proyectos pequeños, con el fin de ser capaces de cumplir las metas que nos fijamos,
nunca pensar en proyectos extremadamente grandes que se nos escapen de las manos, ya
que lo mas probable es que nunca los terminemos, lo cual nos llevará a la frustración. Es
común que las personas que comienzan en el área de desarrollo de juegos comiencen
programando algunos remakes como tetriz, space invader, etc.

       Aunque muchos querrían empesar armando algunos juegos 3D tipo Need For Speed,
Doon, PES, Diablo, LineageII, etc. A quien se le allá ocurrido esa idea les aviso de antemano
que intentar hacer algo así es una tarea Titanica y solo los llevaría a la frustración Es mas
estos juegos son realizados por grandes equipos de programadores, sonidistas, grafistas,
etc. Aquí les doy algunos números:

       Se invierte el doble de dinero en desarrollo de juegos con realización al Cine, el
desarrollo de un juego en 3D es un negocio serio, Puede tomar de 2 a 3 años completar un
juego como los anteriormente mencionados lo que supone un costo de 8 a 10 millones de
US$ lo que supone que se devén vender + de 200.000 solo para pagar los costos y un dato
importante pocos juegos logran vender mas de 100.000 aun así a no desesperar.

       Hay varias Razones por la cual este curso esta basado en el desarrollo de juegos en
2D y no así en 3D aunque la moda en estos días sea la de desarrollarlos en 3D en seguida
pasare a listar las razones por las cuales este curso esta dedicado al desarrollo de juegos en
2D.



Diferencias entre 3D y 2D
       Muchos se preguntaran por que este tema, bueno la razón es sencilla, este curso solo
abarcara la parte de programación de juegos en 2D, esto no es por cuestiones de que
prefiera los juegos en 2D, lo que pasa es que es mas sencillo aprender primero a manejarse
en un entorno 2D y luego recién pasar a una Api 3D, la mayoría de los conceptos son
similares en cuanto a cuestiones de coliciones, IA, etc. bien comencemos:

       En primer lugar las API 3D se basan en polígonos, Estos polígonos están formados por
vértices con coordenadas en 3D. Lo que hacemos (o lo que hace la API), es “proyectar” estos
polígonos sobre un plano (la pantalla, o más concretamente, un trozo de la pantalla al que se
llama “viewport”).

        Cuando esos polígonos los dibujamos en pantalla, además tenemos la opción de
rellenarlos con una imagen, a la que llamamos “textura”. Este proceso se llama
“rasterización”. Entonces, para hacer una aplicación 2D en una librería 3D, bastaría con usar
una proyección ortogonal.




2
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com


        Eso es completamente correcto para las librerías 3D, que se basan en el proceso de
“proyección + rasterización”. Sin embargo, al usar una librería 2D como SDL, esos conceptos
sencillamente no existen.

Nota: digo SDL ya que pygame es una implementacion elegante al estilo Python de las
librerías de SDL ya que existen otras implementaciones de SDL en Python pero terminan
obligando a los programadores a escribir código al estilo C/C++ y por ende la programación
de juegos termina siendo algo engorrosa.

       Para entender cómo es la filosofía de la programación clásica 2D, hay que pensar
cómo eran los ordenadores de hace 15 años. En esa época las tarjetas aceleradoras no
existían (o costaban una pasta (demasiado diría para esos pequeños procesadores)), y todo
este proceso de “proyección + rasterización” tenía que hacerse mediante software. Y en
aquella época, los procesadores no eran especialmente rápidos, especialmente en
operaciones en punto flotante.

      Así que es lógico que al programar una aplicación en 2D, se hiciese mediante un
sistema en el que las proyecciones y rasterizaciones no existan, y todos los cálculos sean
únicamente operaciones enteras, que los procesadores pueden realizar mucho más rápido.



Herramientas Necesarias
      Para poder crear un juego en 2D ademas de tener la idea de cómo funcionara el
mismo se necesitan algunas herramientas para su desarrollo:



Lenguaje de Programación
       Se puede programar juegos en casi cualquier lenguaje, aunque El lenguaje por
excelencia en la programación de juegos siempre ha sido C/C++ pero C/C++ plantea una
gran dificultad de ser aprendido por los programadores, ademas de que la mayoría de las
cosas las tendríamos que hacer a mano de ahí viene a nuestra Ayuda Python quien ademas
de ser fácil de aprender nos solucionara una gran cantidad de problemas que con C/C++
hubiéramos querido tirar todo por la ventana. Por ejemplo aprender lo necesario de Python
para programar si no sabemos nada acerca de programación nos tomaría a lo sumo 2
semana, en cambio aprender C/C++ de primera fácilmente nos tomaría como mmínimo 3
meses....



Editor de Texto
       Sera donde escribiremos nuestro código fuente por ejemplo en windows tenemos por
defecto nuestro aburrido Notepad, aunque podemos bajarnos algunos mas avansados como
el Notepad++, Scite, en Linux tenemos varios VIN, Nano, gedit, yo recomendaría Geany o
Eric.




3
Curso de: Programacion de Juegos con PyGame
          Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com




                             (Vista del Editor Notepad++)




                                (Vista del Editor Geany)




API Gráfica


4
Curso de: Programacion de Juegos con PyGame
                  Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com



      Esta es un conjunto de Bibliotecas (librerías) que nos permiten manipular imágenes,
las mas conocidas Son:

    •   OpenGL (Multiplataforma)
    •   SDL (Multiplataforma)
    •   Allegro (Multiplataforma)
    •   DirectX, Direct3D (windows)

      DirectX es un API desarrollada por MS el uso de esta api es un poco engorroso,
ademas de la falta de documentación sobre la misma, otro inconveniente es que todo lo que
programemos solo podrá correr en MS windows

       OpenGL es una API desarrollada especialmente para el desarrollo de aplicaciones 3D
aunque se la podría usar para desarrollo de juegos 2D pero a mi opinión eso seria usar un
cañón para matar una mosca (por si les interesen usen COCOS que hace eso),
Multiplataforma por lo que nuestro código podrá ser importado a cualquier SO como Linux,
Mac OS, windows

       SDL (Simple Direct-Medial Layer) Es una Api para realizar operaciones de dibujo 2D,
en este Curso usaremos una adaptacion de SDL a Python PyGame. Al igual que OpenGL SDL
es Multiplataforma



Conceptos Básicos de Programación 2D
       Una librería gráfica 2D se basa en el concepto de SUPERFICIES, y de operaciones
entre superficies. Una superficie no es más que un espacio en memoria donde guardar una
imagen, y las operaciones que se realizan entre superficies, son copias de trozos de una
superficie origen sobre una superficie destino. Un ejemplo que los usuarios de windows
Conocerán es: el Paint.

       Al cargar el paint, el lienzo representaría una superficie. Puede tener una imagen
cargada desde un archivo, puede estar en blanco, etc... Ahora imaginad que ejecutamos 2
paints. Cada uno con su lienzo. Eso representa 2 superficies en memoria. Podemos tener una
superficie vacía (blanca), y otra con una imagen cargada del archivo.

       La operación básica entre superficies, sería hacer un “Copy-Paste”. Seleccionar una
región en la superficie A, y copiarla sobre algún lugar en la superficie B. Esta operación es a
la que se llama “Blit”, y es la más importante en cualquier librería 2D.




5
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com


       Al igual que en Paint (los usuarios de MS Windows lo devén conocer muy bien), al
hacer un Blit, lo que había en la superficie destino en la región que sobrescribimos se pierde
para siempre. Al copiar sobre esa posición machacamos los datos anteriores. Esto es
importante si tenemos, por ejemplo, un personaje moviéndose sobre un escenario.

       Al dibujar el personaje destruimos esa región del escenario, así que si el personaje se
mueve, tendremos que volver a dibujar de nuevo el escenario por cada fotograma. También
de esto sacamos que el orden en que hagamos los blits importa, y mucho. Si algo tiene que
quedar por encima, tiene que ser lo último que bliteemos.




       No interesa si manchamos la superficie destino ya que tenemos intacto el original.
Pero bien solo hemos estado bliteando imágenes sobre otras ahora como mostramos esto
sobre pantalla.



Flipping
       Vale, ahora tenemos una imagen que hemos compuesto sobre el Buffer Primario
(nuestra famosa superficie destino en la imagen). Ya tenemos todo listo para que se muestre
en el monitor. ¿Como hacemos para “actualizar” el monitor?


Tenemos 3 formas de hacerlo paso a explicarlas:

Dibujar Directamente Sobre Pantalla
      La primera forma es ir dibujando todos los elementos sobre pantalla pero con ello
tenemos un problema el cual es que al ejecutar nuestro juegos veremos un molesto
parpadeo esto sucede ya que mientras intentamos dibujar sobre pantalla esta se re-dibuja
produciendo retraso en el refresco vertical mejor conocido como VSINC.



Doble Buffer
       El segundo método es copiar todas la imágenes sobre una superficie y recién dibujar
sobre la tarjeta gráfica así evitando ese molesto parpadeo, este metodo se denomina Doble



6
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com


Buffer y produce un efecto suavizando la imagen. Por suerte SDL (Nosotros usaremos
PyGame que es una librería que trabaja con SDL) nos resuelve este problema.




Dirty Rectangles (Rectángulos Sucios)
        Esta técnica es una forma de optimizar la técnica de Double Buffering constantemente
estamos volcando el contenido completo de una zona de memoria a otra, pero puede haber
ocasiones donde no este sucediendo ningún cambio en pantalla, o tal vez solo haya
cambiado una pequeña parte de esta. Es aquí donde aparece la técnica, Dirty Rectangles
(rectángulos sucios) y su funcionamiento es bastante simple. Copiaremos a la Video RAM
solo las áreas de la pantalla que han cambiado, por lo tanto, cada vez que algún sprite
cambie su posición, copiaremos a la memoria de video el área de un rectángulo que rodee al
sprite (incluyendo el área donde se encontraba antes) y la colocaremos justo en las mismas
coordenadas en la Video RAM. Pero no siempre es recomendable utilizar esta técnica, ya que
podemos tener demasiados sprites moviéndose por la pantalla, y ya no sería óptimo estar
copiando cada rectángulo a la Video RAM, ya que sería lo mismo que copiar la pantalla
completa, en un caso así conviene solo usar la técnica Double Buffering.



Estructura básica que deveria tener un Juego
Inicializacion
Ciclo de juego:
      Entradas (teclado, mouse, joistick)
      Procesamiento de eventos
      Salidas (gráficos, sonidos)
Finalizacion




7
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com




Pixel

       El elemento mas básico en la programación gráfica es el pixel, es decir un elemento
de una imagen que representa la unidad mínima que esta puede contener, básicamente lo
podríamos definir como un simple punto que forma parte de una imagen definida que tiene
asociado un color.




        La imagen que aquí vemos esta formada por un arreglo de pixel en forma de matriz,
grilla o cuadricula la cual se conoce como mapa de bits.




8
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com




BITMAP (Mapa de Bits)

        Un Bitmap básicamente es una cuadricula de pixeles que tiene atributos como ancho
y alto (la cual se mide en numero de pixeles) y tiene asociado algún formato ya sea bmp,
png, jpg, gif, etc. La diferencia entre los formatos se da por algunos parámetros tales como
calidad y tamaño de archivo, por ejemplo si queremos mantener tamaño/calidad, los formato
que se ajustan son png y jpg, pero acarrean un problema, ya que usan algoritmos de
conprecion trabajar directamente con ellos consume mucho recursos por lo que se debe
hacer una conversión a un formato mas simple da el caso del bmp, tif, etc.




BPP (Bits por Pixel)

       Otra características de las imágenes es la profundidad de colores. (números de bits
que se usan para representar un color en particular), el numero de bits que podemos utilizar
es de 1, 8, 16, 24, 32 siendo 32 bits la mas alta resolución posible.

El numero de combinaciones posibles se calcula de la siguiente forma:

CANTIDAD DE COLORES = 2BPP

        Cuando utilizamos 8 bits para mostrar un pixel tenemos 256 colores posibles pero no
se representa usando las intensidades RGB (ver mas abajo) sino mediante una paleta de
colores (un arreglo que contiene 256 colores ), aunque ya no se use esto casi uno de los
usos mas comunes era el de aplicar distintas paletas a una sola imagen obteníamos distintas
imágenes ejemplo: si poníamos rojo para el jugador 1 y azul para el jugador 2 tenias dos
sprites diferentes sin tener que almacenar 2 veses la misma imagen.




9
Curso de: Programacion de Juegos con PyGame
                  Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com


       Actualmente los formatos que mas se usan son el de 16 y 32 bits , El color se
representa normalmente en el formato RGB = (Red, Green, Blue) aunque algunos formatos
imágenes tienen un parámetro extra el caso de los png RGBA = (Red, Green, Blue, Alpha)
(véase Color-Key), todas las componentes que forman un color se empaquetan en un entero,
el orden depende de la arquitectura que estemos usando RGB (Big Endian) o BGR (Little
Endian).



Resolución de Pantalla

        Anteriormente mencionamos que las imágenes tienen un ancho y un alto dado en
pixel a esto se llama resolución, la resolución no se aplica a la imagen solamente sino
también a la pantalla, las resoluciones mas estándares son:

•      320x200
•      320x240
•      640x480
•      800*600
•      1024*768
•      1152x864
•      etc.

       La resolución de pantalla en un juego es de gran importancia y depende del tamaño
de sprites que estemos usando, el escenario, y ademas una cosa importante a mayor
resolución y ,mayor cantidad de bits por pixel nuestra maquina necesitara mas recursos para
trabajar ademas tendremos que ver que la resolución sea soportada por nuestro monitor,
etc.



Algunos modos conocidos:
Ancho x Alto x BPP
320x200x8 (nuestro tan querido modo 13h (si alguno jugo con un family game (consola de 8 bits, o
si son mas retro un Atari :P) alguna ves debe conocerlo))
320x240x8 (modo x)
640x480x16 (la configuración de la SNES y GENESIS (otro lindo recuerdo)
800x600x32 (800 pixeles de ancho x 600 pixeles de alto a 32 bits por pixel)
etc.

      Por ejemplo supongamos que estamos trabajando con el siguiente modo de video,
800x600x32 y queremos conocer cuando memoria ocupa una imagen con las mismas
dimensiones que la resolución seleccionada, entonces el tamaño que ocupará será de:

Tamaño = 800 x 600 x 4(1 byte = 8 bits) = 1.920.000 bytes = 1.83 Mb

       En los primeros juegos que aparecieron para PC, se utilizaban resoluciones muy bajas
como 320x200 (también conocido como modo 13h) o 320x240 (modo x) y a 8 bits por pixel,
o sea como ya sabemos disponíamos de un máximo de 256 colores.

      A medida que pasaron los años se empezaron a utilizar resoluciones de 640x480 o
800x600 y a profundidades de color más altas, de 16 o 32 bits, todo esto gracias a que
aumentaron las capacidades de las tarjetas de video.




10
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com


        Hoy en día, en la mayoría de los juegos tenemos la posibilidad de elegir el modo de
video que mejor se adapte a nuestro equipo. Existen algunos casos típicos, como cuando
queremos tener el mejor rendimiento en nuestro video juego, bajamos la resolución al
mínimo o a una resolución intermedia. Al contrario, cuando disponemos de un buen equipo y
una buena tarjeta de video, lo más probable es que seleccionemos un modo de video más
alto, para disfrutar de unos gráficos de mejor calidad.



Sprite
      Un sprite (no me gusta usar su posible traducion 'Duende') es cualquier objecto que
aparece en nuestro juego aunque normalmente nos referimos a las imágenes de los
personajes, los sprites pueden ser estaticos (los tiles del mapa) o dinámicos (un personaje
de nuestro juego). Normalmente un sprite trae consigo un conjunto de atributos los mas
comunes, imagen y posición en pantalla.




Transparencia: Color-Key
        Cuando mostramos una imagen en pantalla sabemos que siempre se vera como una
rectángulo pero sabemos que tiene dentro representado un objecto o personaje, al dibujar
esta imagen queremos ver solamente la forma representada, para ello debemos elegir algún
color transparente, pintar con ese color las zonas que no queremos que se dibujen en
pantalla y luego dibujar la imagen ignorando dicho color.

       Normalmente utilizamos el color magenta, (su valor en RGB es (255, 0, 255)) como
color de transparencia ya que es muy poco probable que se encuentre en nuestra imagen.




       Pero no solo usar un color como el magenta es la solución para no ver una imagen en
su forma original, también podemos hacer uso de las propiedades del formato gráfico PNG
(Portable Network Graphics), ya que este formato guarda un canal alpha con las partes
transparentes de la imagen.



Transparencias: Máscara
       Existe otro método para ignorar un color en una imagen, el uso de una máscara que
se antepone al Bitmap original, es decir, debemos tener otro Bitmap que indica cuales son los
pixeles transparentes. El color que indica la transparencia es el negro, y el color blanco la
figura que queremos mostrar. Por lo tanto, al dibujar la imagen, recorreremos cada pixel de
la máscara, y si este color es blanco, mostraremos el pixel del Bitmap original que se




11
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com


encuentra en esa posición.




Transformaciones
       Cuando dibujamos un sprite en pantalla, tenemos la posibilidad de aplicar algunas
transformaciones, las más usadas son las siguientes:



Transformaciones: Translacion
       Esta es la transformación más simple, corresponde a cambiar la posición del sprite
para luego dibujarla en otro lugar de la pantalla, dando el efecto de movimiento, sin duda lo
más usado en cualquier video juego Y se resume en asignar una nueva posición a las
coordenadas (x, y) del sprite.

       Por ejemplo si las variables x e y son las coordenadas de la esquina superior izquierda
del sprite, y vx, vy las velocidades en cada eje, con una simple suma en cada componente
cambiaremos la posición del sprite.

x = x + dx
y = y + dy



Transformaciones: Rotación
       Otra transformación típica, que consiste en girar el sprite un número determinado de
grados. Se usa para mostrar objetos vistos desde otro ángulo, por ejemplo en el video juego
Micro Machines, cuando doblamos cambiamos el ángulo del auto y luego este cambio lo
vemos reflejado en la pantalla gracias a la rotación.




Transformaciones: Scaling
      Otra transformación muy usada en algunos video juegos, consiste en escalar una
imagen, es decir, cambiar su tamaño, normalmente proporcional.



12
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com




        En la imagen anterior nos damos cuenta que al aumentar su tamaño, se produce un
 efecto no deseado en los bordes de la imagen, conocido como aliasing, es decir, las líneas o
curvas que forman los bordes de la imagen se ven discontinuas (en forma de escalera). Para
esto existe una solución, el antialiasing, una técnica que permite suavizar todos los bordes y
así disminuir el efecto de escalera. En toda API gráfica encontraremos una función que
realice esta tarea.



Transformaciones: Flipping
        El flipping es un tipo de transformación especial para realizar algunos efectos.
Básicamente existen dos tipos, Vertical Flip que corresponde al efecto que se produce cuando
se refleja un objeto en el agua y Horizontal Flip que corresponde al reflejo de un objeto en
un espejo. Con la siguiente imagen quedará mucho más claro.




Alpha blending
       Es una técnica para crear transparencia en la imagen, para ello se agrega un cuarto
canal (Alpha) esta técnica se puede aplicar a un Bitmap completo o solo a un grupo de
pixeles.




13
Curso de: Programacion de Juegos con PyGame
                  Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com



Sistema de coordenadas 2D
       Es importante saber que cuando dibujamos algo en pantalla, siempre tendremos que
informar la posición en la cual dibujaremos el objeto. Por defecto la posición de un objeto se
encuentra en la esquina superior izquierda, pero algunos prefieren usar como punto de
anclaje el centro, y en general puede ser cualquier otro punto.

      Calcular el centro del punto es tan simple como sumar a la posición x, la mitad del
ancho del objeto y a la posición y, la mitad de la altura del objeto.

        Nosotros estamos acostumbrados a trabajar en el cuadrante I del plano cartesiano,
donde las coordenadas del eje "x" crecen hacia la derecha y las coordenadas del eje "y"
crecen hacia arriba, pero al trabajar con gráficos en el computador, esto es relativamente
distinto, ya que el eje y se invierte, es decir, ahora el mundo está al revés, las coordenadas
en el eje "y" crecerán hacia abajo.

       En la siguiente imagen podemos ver el plano cartesiano en su forma normal versus el
plano cartesiano utilizado en la programación gráfica.




                                  Sistema de coordenadas Cartesianas




14
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com




                     Sistema de coordenadas utilizado en la Programación Gráfica



       Como vemos las api gráficas solo muestra el primer cuadrante solo que rotado 180
grado, ademas algo importante a tener en cuenta es que para las coordenadas de los
objectos solo se puede utilizar valores enteros.



Sincronización en los video juegos
       Lo ideal en cualquier video juego, es que todos los objetos se muevan a la misma
velocidad, independiente de la velocidad del computador donde se ejecute. Si no nos
preocupamos por esto, y ejecutamos nuestro video juego en un computador antiguo, por
ejemplo, en un Pentium de 200 Mhz, probablemente el video juego se vea muy lento, en
cambio si lo ejecutamos en un computador con un procesador de última generación se verá
tan rápido que será imposible jugar.
Para solucionar este problema, disponemos de dos métodos.



Sincronización por Framerate
      El primer método, consiste en sincronizar el framerate, también conocido como FPS o
Frames per Second (Cuadros por segundo). Al hablar de FPS, nos referimos a la frecuencia
con que se ejecuta el ciclo principal de un video juego en un segundo. A mayor cantidad de
FPS obtendremos una mayor fluidez en las animaciones.

       En el cine se considera que una velocidad de 24 FPS es suficiente para que el ojo
humano perciba una animación fluida, pero en los video juegos esta cantidad es demasiado
baja. Valores adecuados son sobre 60 o 100 FPS.




15
Curso de: Programacion de Juegos con PyGame
                 Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com


        El método es bastante sencillo, y lo primero que debemos hacer cuando comienza el
ciclo del video juego, es obtener el tiempo transcurrido hasta ese momento, que
normalmente se mide en milisegundos. Luego procesamos lo relacionado al video juego, ya
sea entrada, IA, lógica del juego, detección de colisiones, dibujo de gráficos, etc. y antes de
terminar el ciclo, creamos otro loop en el cual vamos obteniendo el tiempo transcurrido hasta
ese momento, calculamos la diferencia de tiempo y verificamos si es menor a los FPS que
buscamos. De esta forma cada vez que ejecutemos el programa en una máquina diferente,
el programa esperará el tiempo adecuado para obtener los FPS.

       Utilizando este método, en computadores más rápidos se verá más fluido, pero si lo
ejecutamos en una máquina con un procesador mucho más antiguo del que usamos para
desarrollarlo, lo más probable es que se vea bastante lento.

       Claro, no todo podía ser perfecto, pero es por eso que los video juegos piden algunos
requerimientos mínimos.



Sincronización por Tiempo
      El segundo método consiste en sincronizar en base al tiempo. En este método no
importa el framerate que posea el video juego, pero aun así los objetos se moverán a la
misma velocidad en todas las máquinas.

       Este método se usa bastante en video juegos 3D, ya que el framerate varía mucho en
cada ciclo, dependiendo de la cantidad de objetos que se deban renderizar. Pero este método
también tiene su desventaja, a pesar de que los objetos se mueven siempre a la misma
velocidad, en un computador más lento, el desplazamiento no se verá fluidamente. Esto se
aprecia en el ejemplo que ya vimos, en el caso extremo de demorarse 1 segundo cada ciclo,
cada vez que se deba mover un objeto, este aparecerá 5 pixeles más a la derecha,
produciéndose un salto muy notorio.

       En computadores aun más lentos, se comenzará a ver un parpadeo en el
desplazamiento de los objetos. Pero como ya dijimos nuestro video juego siempre tendrá
unos requerimientos mínimos y tendremos que seleccionar el método que más nos acomode.
Pero claramente el primer método, Sincronización por framerate, es el más simple y el más
extendido.



Resumen
      Hemos aprendido varios conceptos, que nos ayudarán a comprender mejor la
programación gráfica que se usa en los video juegos 2D.

        Todos estos conceptos se pueden aplicar a cualquier biblioteca gráfica, muchas de las
cosas que vimos ya vienen implementadas, como por ejemplo setear un modo de video,
obtener un color, realizar operaciones de blitting, efectos de alpha blending, usar
transparencias por color keys, transformaciones como rotación, escalado, traslación, page
flipping, etc., por lo tanto no será necesario que escribamos código para esto, pero conviene
conocer su funcionamiento.




16

Más contenido relacionado

Destacado

División de un segmento por otro
División de un segmento por otroDivisión de un segmento por otro
División de un segmento por otroAntonio García
 
Programación con Pygame III
Programación con Pygame IIIProgramación con Pygame III
Programación con Pygame IIIFernando Salamero
 
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014Fernando Salamero
 
(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la Física(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la FísicaFernando Salamero
 
Programación de Videojuegos con Python y Pilas (III)
Programación de Videojuegos con Python y Pilas (III)Programación de Videojuegos con Python y Pilas (III)
Programación de Videojuegos con Python y Pilas (III)Fernando Salamero
 
Curso Programacion de Juego Introducion IA
Curso Programacion de Juego Introducion IACurso Programacion de Juego Introducion IA
Curso Programacion de Juego Introducion IARicardo Daniel Quiroga
 
Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)Fernando Salamero
 

Destacado (17)

División de un segmento por otro
División de un segmento por otroDivisión de un segmento por otro
División de un segmento por otro
 
Intro PygameCapitulo 3
Intro PygameCapitulo 3Intro PygameCapitulo 3
Intro PygameCapitulo 3
 
Intro pygamev2
Intro pygamev2Intro pygamev2
Intro pygamev2
 
Python básico II
Python básico IIPython básico II
Python básico II
 
Intro Pygame Capitulo 6
Intro Pygame Capitulo 6Intro Pygame Capitulo 6
Intro Pygame Capitulo 6
 
Pythonic Math
Pythonic MathPythonic Math
Pythonic Math
 
Intro PyGame Capitulo 0
Intro PyGame Capitulo 0Intro PyGame Capitulo 0
Intro PyGame Capitulo 0
 
Programación con Pygame III
Programación con Pygame IIIProgramación con Pygame III
Programación con Pygame III
 
Programación con Pygame IV
Programación con Pygame IVProgramación con Pygame IV
Programación con Pygame IV
 
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
Taller de Pilas Engine, un motor de juegos en Python - PyConES 2014
 
(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la Física(Sin anotaciones) - En busca de la Física
(Sin anotaciones) - En busca de la Física
 
Programación de Videojuegos con Python y Pilas (III)
Programación de Videojuegos con Python y Pilas (III)Programación de Videojuegos con Python y Pilas (III)
Programación de Videojuegos con Python y Pilas (III)
 
Curso Programacion de Juego Introducion IA
Curso Programacion de Juego Introducion IACurso Programacion de Juego Introducion IA
Curso Programacion de Juego Introducion IA
 
Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)Programación de Videojuegos con Python y Pilas (I)
Programación de Videojuegos con Python y Pilas (I)
 
Capitulo 4
Capitulo 4Capitulo 4
Capitulo 4
 
Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)
 
Programación con Pygame I
Programación con Pygame IProgramación con Pygame I
Programación con Pygame I
 

Similar a Intro PyGame Capitulo 1

Cómo empezar en el desarrollo de videojuegos
Cómo empezar en el desarrollo de videojuegosCómo empezar en el desarrollo de videojuegos
Cómo empezar en el desarrollo de videojuegosRoberto Albornoz
 
Iniciando c
Iniciando cIniciando c
Iniciando c____
 
Historia de c++
Historia de c++Historia de c++
Historia de c++edwin562
 
Historia de c++
Historia de c++Historia de c++
Historia de c++edwin562
 
Presentació Photoashop Andreu, Vicenç, Florence
Presentació Photoashop Andreu, Vicenç, FlorencePresentació Photoashop Andreu, Vicenç, Florence
Presentació Photoashop Andreu, Vicenç, Florenceflorencechamp
 
10a jesus tacuma
10a jesus tacuma10a jesus tacuma
10a jesus tacumajesustacuma
 
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...Ricardo Guerrero Gómez-Olmedo
 
Historia de c++
Historia de c++Historia de c++
Historia de c++david-27
 
Desarrollo de videojuegos
Desarrollo de videojuegosDesarrollo de videojuegos
Desarrollo de videojuegosAxelMeroD
 
2. principales elementos
2.  principales elementos2.  principales elementos
2. principales elementosVictor Aravena
 
Manual de practicas segundo parcial
Manual de practicas segundo parcialManual de practicas segundo parcial
Manual de practicas segundo parcialGuillermo Mendoza
 
Programación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoProgramación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoCongresoWeb
 

Similar a Intro PyGame Capitulo 1 (20)

Cómo empezar en el desarrollo de videojuegos
Cómo empezar en el desarrollo de videojuegosCómo empezar en el desarrollo de videojuegos
Cómo empezar en el desarrollo de videojuegos
 
Iniciando c
Iniciando cIniciando c
Iniciando c
 
Ipj pdf-042[1]
Ipj pdf-042[1]Ipj pdf-042[1]
Ipj pdf-042[1]
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Presentació Photoashop Andreu, Vicenç, Florence
Presentació Photoashop Andreu, Vicenç, FlorencePresentació Photoashop Andreu, Vicenç, Florence
Presentació Photoashop Andreu, Vicenç, Florence
 
10a jesus tacuma
10a jesus tacuma10a jesus tacuma
10a jesus tacuma
 
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
Spain AI 2022 - ¡Oh, un modelo de ML, vamos a desplegarlo! - Machine Learning...
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Introduccion a maratis con c++
Introduccion a maratis con c++Introduccion a maratis con c++
Introduccion a maratis con c++
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Desarrollo de videojuegos
Desarrollo de videojuegosDesarrollo de videojuegos
Desarrollo de videojuegos
 
Visual studio code
Visual studio codeVisual studio code
Visual studio code
 
2. principales elementos
2.  principales elementos2.  principales elementos
2. principales elementos
 
Yudy Centeno M
Yudy Centeno MYudy Centeno M
Yudy Centeno M
 
Manual de practicas segundo parcial
Manual de practicas segundo parcialManual de practicas segundo parcial
Manual de practicas segundo parcial
 
Hxc6
Hxc6Hxc6
Hxc6
 
Begins 09
Begins 09Begins 09
Begins 09
 
Trabajo de programacion grafica
Trabajo de programacion graficaTrabajo de programacion grafica
Trabajo de programacion grafica
 
Programación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoProgramación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge Pintado
 

Último

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 

Último (20)

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 

Intro PyGame Capitulo 1

  • 1. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Programación de Juegos con PyGame Capitulo 1: Nociones Básicas 1
  • 2. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Introducion La mayoría de las personas que han pasado por áreas relacionados con la programación, se han preguntado alguna vez: ¿Cómo se hace un video juego?, ¿Qué tienen que saber? ¿Por donde empezar? y muchas preguntas más. Muchos han intentado hacerlo sin resultado alguno, otros en cambio han podido crear sus primeros juegos con un poco de esfuerzo, pero aun así siempre quedan preguntas pendientes por responder y bastante por aprender. En este tutorial pretendemos ayudarlos a resolver varias de sus dudas sobre el desarrollo de juegos. Para comenzar en el desarrollo de video juegos es preferible hacerlo con proyectos pequeños, con el fin de ser capaces de cumplir las metas que nos fijamos, nunca pensar en proyectos extremadamente grandes que se nos escapen de las manos, ya que lo mas probable es que nunca los terminemos, lo cual nos llevará a la frustración. Es común que las personas que comienzan en el área de desarrollo de juegos comiencen programando algunos remakes como tetriz, space invader, etc. Aunque muchos querrían empesar armando algunos juegos 3D tipo Need For Speed, Doon, PES, Diablo, LineageII, etc. A quien se le allá ocurrido esa idea les aviso de antemano que intentar hacer algo así es una tarea Titanica y solo los llevaría a la frustración Es mas estos juegos son realizados por grandes equipos de programadores, sonidistas, grafistas, etc. Aquí les doy algunos números: Se invierte el doble de dinero en desarrollo de juegos con realización al Cine, el desarrollo de un juego en 3D es un negocio serio, Puede tomar de 2 a 3 años completar un juego como los anteriormente mencionados lo que supone un costo de 8 a 10 millones de US$ lo que supone que se devén vender + de 200.000 solo para pagar los costos y un dato importante pocos juegos logran vender mas de 100.000 aun así a no desesperar. Hay varias Razones por la cual este curso esta basado en el desarrollo de juegos en 2D y no así en 3D aunque la moda en estos días sea la de desarrollarlos en 3D en seguida pasare a listar las razones por las cuales este curso esta dedicado al desarrollo de juegos en 2D. Diferencias entre 3D y 2D Muchos se preguntaran por que este tema, bueno la razón es sencilla, este curso solo abarcara la parte de programación de juegos en 2D, esto no es por cuestiones de que prefiera los juegos en 2D, lo que pasa es que es mas sencillo aprender primero a manejarse en un entorno 2D y luego recién pasar a una Api 3D, la mayoría de los conceptos son similares en cuanto a cuestiones de coliciones, IA, etc. bien comencemos: En primer lugar las API 3D se basan en polígonos, Estos polígonos están formados por vértices con coordenadas en 3D. Lo que hacemos (o lo que hace la API), es “proyectar” estos polígonos sobre un plano (la pantalla, o más concretamente, un trozo de la pantalla al que se llama “viewport”). Cuando esos polígonos los dibujamos en pantalla, además tenemos la opción de rellenarlos con una imagen, a la que llamamos “textura”. Este proceso se llama “rasterización”. Entonces, para hacer una aplicación 2D en una librería 3D, bastaría con usar una proyección ortogonal. 2
  • 3. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Eso es completamente correcto para las librerías 3D, que se basan en el proceso de “proyección + rasterización”. Sin embargo, al usar una librería 2D como SDL, esos conceptos sencillamente no existen. Nota: digo SDL ya que pygame es una implementacion elegante al estilo Python de las librerías de SDL ya que existen otras implementaciones de SDL en Python pero terminan obligando a los programadores a escribir código al estilo C/C++ y por ende la programación de juegos termina siendo algo engorrosa. Para entender cómo es la filosofía de la programación clásica 2D, hay que pensar cómo eran los ordenadores de hace 15 años. En esa época las tarjetas aceleradoras no existían (o costaban una pasta (demasiado diría para esos pequeños procesadores)), y todo este proceso de “proyección + rasterización” tenía que hacerse mediante software. Y en aquella época, los procesadores no eran especialmente rápidos, especialmente en operaciones en punto flotante. Así que es lógico que al programar una aplicación en 2D, se hiciese mediante un sistema en el que las proyecciones y rasterizaciones no existan, y todos los cálculos sean únicamente operaciones enteras, que los procesadores pueden realizar mucho más rápido. Herramientas Necesarias Para poder crear un juego en 2D ademas de tener la idea de cómo funcionara el mismo se necesitan algunas herramientas para su desarrollo: Lenguaje de Programación Se puede programar juegos en casi cualquier lenguaje, aunque El lenguaje por excelencia en la programación de juegos siempre ha sido C/C++ pero C/C++ plantea una gran dificultad de ser aprendido por los programadores, ademas de que la mayoría de las cosas las tendríamos que hacer a mano de ahí viene a nuestra Ayuda Python quien ademas de ser fácil de aprender nos solucionara una gran cantidad de problemas que con C/C++ hubiéramos querido tirar todo por la ventana. Por ejemplo aprender lo necesario de Python para programar si no sabemos nada acerca de programación nos tomaría a lo sumo 2 semana, en cambio aprender C/C++ de primera fácilmente nos tomaría como mmínimo 3 meses.... Editor de Texto Sera donde escribiremos nuestro código fuente por ejemplo en windows tenemos por defecto nuestro aburrido Notepad, aunque podemos bajarnos algunos mas avansados como el Notepad++, Scite, en Linux tenemos varios VIN, Nano, gedit, yo recomendaría Geany o Eric. 3
  • 4. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com (Vista del Editor Notepad++) (Vista del Editor Geany) API Gráfica 4
  • 5. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Esta es un conjunto de Bibliotecas (librerías) que nos permiten manipular imágenes, las mas conocidas Son: • OpenGL (Multiplataforma) • SDL (Multiplataforma) • Allegro (Multiplataforma) • DirectX, Direct3D (windows) DirectX es un API desarrollada por MS el uso de esta api es un poco engorroso, ademas de la falta de documentación sobre la misma, otro inconveniente es que todo lo que programemos solo podrá correr en MS windows OpenGL es una API desarrollada especialmente para el desarrollo de aplicaciones 3D aunque se la podría usar para desarrollo de juegos 2D pero a mi opinión eso seria usar un cañón para matar una mosca (por si les interesen usen COCOS que hace eso), Multiplataforma por lo que nuestro código podrá ser importado a cualquier SO como Linux, Mac OS, windows SDL (Simple Direct-Medial Layer) Es una Api para realizar operaciones de dibujo 2D, en este Curso usaremos una adaptacion de SDL a Python PyGame. Al igual que OpenGL SDL es Multiplataforma Conceptos Básicos de Programación 2D Una librería gráfica 2D se basa en el concepto de SUPERFICIES, y de operaciones entre superficies. Una superficie no es más que un espacio en memoria donde guardar una imagen, y las operaciones que se realizan entre superficies, son copias de trozos de una superficie origen sobre una superficie destino. Un ejemplo que los usuarios de windows Conocerán es: el Paint. Al cargar el paint, el lienzo representaría una superficie. Puede tener una imagen cargada desde un archivo, puede estar en blanco, etc... Ahora imaginad que ejecutamos 2 paints. Cada uno con su lienzo. Eso representa 2 superficies en memoria. Podemos tener una superficie vacía (blanca), y otra con una imagen cargada del archivo. La operación básica entre superficies, sería hacer un “Copy-Paste”. Seleccionar una región en la superficie A, y copiarla sobre algún lugar en la superficie B. Esta operación es a la que se llama “Blit”, y es la más importante en cualquier librería 2D. 5
  • 6. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Al igual que en Paint (los usuarios de MS Windows lo devén conocer muy bien), al hacer un Blit, lo que había en la superficie destino en la región que sobrescribimos se pierde para siempre. Al copiar sobre esa posición machacamos los datos anteriores. Esto es importante si tenemos, por ejemplo, un personaje moviéndose sobre un escenario. Al dibujar el personaje destruimos esa región del escenario, así que si el personaje se mueve, tendremos que volver a dibujar de nuevo el escenario por cada fotograma. También de esto sacamos que el orden en que hagamos los blits importa, y mucho. Si algo tiene que quedar por encima, tiene que ser lo último que bliteemos. No interesa si manchamos la superficie destino ya que tenemos intacto el original. Pero bien solo hemos estado bliteando imágenes sobre otras ahora como mostramos esto sobre pantalla. Flipping Vale, ahora tenemos una imagen que hemos compuesto sobre el Buffer Primario (nuestra famosa superficie destino en la imagen). Ya tenemos todo listo para que se muestre en el monitor. ¿Como hacemos para “actualizar” el monitor? Tenemos 3 formas de hacerlo paso a explicarlas: Dibujar Directamente Sobre Pantalla La primera forma es ir dibujando todos los elementos sobre pantalla pero con ello tenemos un problema el cual es que al ejecutar nuestro juegos veremos un molesto parpadeo esto sucede ya que mientras intentamos dibujar sobre pantalla esta se re-dibuja produciendo retraso en el refresco vertical mejor conocido como VSINC. Doble Buffer El segundo método es copiar todas la imágenes sobre una superficie y recién dibujar sobre la tarjeta gráfica así evitando ese molesto parpadeo, este metodo se denomina Doble 6
  • 7. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Buffer y produce un efecto suavizando la imagen. Por suerte SDL (Nosotros usaremos PyGame que es una librería que trabaja con SDL) nos resuelve este problema. Dirty Rectangles (Rectángulos Sucios) Esta técnica es una forma de optimizar la técnica de Double Buffering constantemente estamos volcando el contenido completo de una zona de memoria a otra, pero puede haber ocasiones donde no este sucediendo ningún cambio en pantalla, o tal vez solo haya cambiado una pequeña parte de esta. Es aquí donde aparece la técnica, Dirty Rectangles (rectángulos sucios) y su funcionamiento es bastante simple. Copiaremos a la Video RAM solo las áreas de la pantalla que han cambiado, por lo tanto, cada vez que algún sprite cambie su posición, copiaremos a la memoria de video el área de un rectángulo que rodee al sprite (incluyendo el área donde se encontraba antes) y la colocaremos justo en las mismas coordenadas en la Video RAM. Pero no siempre es recomendable utilizar esta técnica, ya que podemos tener demasiados sprites moviéndose por la pantalla, y ya no sería óptimo estar copiando cada rectángulo a la Video RAM, ya que sería lo mismo que copiar la pantalla completa, en un caso así conviene solo usar la técnica Double Buffering. Estructura básica que deveria tener un Juego Inicializacion Ciclo de juego: Entradas (teclado, mouse, joistick) Procesamiento de eventos Salidas (gráficos, sonidos) Finalizacion 7
  • 8. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Pixel El elemento mas básico en la programación gráfica es el pixel, es decir un elemento de una imagen que representa la unidad mínima que esta puede contener, básicamente lo podríamos definir como un simple punto que forma parte de una imagen definida que tiene asociado un color. La imagen que aquí vemos esta formada por un arreglo de pixel en forma de matriz, grilla o cuadricula la cual se conoce como mapa de bits. 8
  • 9. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com BITMAP (Mapa de Bits) Un Bitmap básicamente es una cuadricula de pixeles que tiene atributos como ancho y alto (la cual se mide en numero de pixeles) y tiene asociado algún formato ya sea bmp, png, jpg, gif, etc. La diferencia entre los formatos se da por algunos parámetros tales como calidad y tamaño de archivo, por ejemplo si queremos mantener tamaño/calidad, los formato que se ajustan son png y jpg, pero acarrean un problema, ya que usan algoritmos de conprecion trabajar directamente con ellos consume mucho recursos por lo que se debe hacer una conversión a un formato mas simple da el caso del bmp, tif, etc. BPP (Bits por Pixel) Otra características de las imágenes es la profundidad de colores. (números de bits que se usan para representar un color en particular), el numero de bits que podemos utilizar es de 1, 8, 16, 24, 32 siendo 32 bits la mas alta resolución posible. El numero de combinaciones posibles se calcula de la siguiente forma: CANTIDAD DE COLORES = 2BPP Cuando utilizamos 8 bits para mostrar un pixel tenemos 256 colores posibles pero no se representa usando las intensidades RGB (ver mas abajo) sino mediante una paleta de colores (un arreglo que contiene 256 colores ), aunque ya no se use esto casi uno de los usos mas comunes era el de aplicar distintas paletas a una sola imagen obteníamos distintas imágenes ejemplo: si poníamos rojo para el jugador 1 y azul para el jugador 2 tenias dos sprites diferentes sin tener que almacenar 2 veses la misma imagen. 9
  • 10. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Actualmente los formatos que mas se usan son el de 16 y 32 bits , El color se representa normalmente en el formato RGB = (Red, Green, Blue) aunque algunos formatos imágenes tienen un parámetro extra el caso de los png RGBA = (Red, Green, Blue, Alpha) (véase Color-Key), todas las componentes que forman un color se empaquetan en un entero, el orden depende de la arquitectura que estemos usando RGB (Big Endian) o BGR (Little Endian). Resolución de Pantalla Anteriormente mencionamos que las imágenes tienen un ancho y un alto dado en pixel a esto se llama resolución, la resolución no se aplica a la imagen solamente sino también a la pantalla, las resoluciones mas estándares son: • 320x200 • 320x240 • 640x480 • 800*600 • 1024*768 • 1152x864 • etc. La resolución de pantalla en un juego es de gran importancia y depende del tamaño de sprites que estemos usando, el escenario, y ademas una cosa importante a mayor resolución y ,mayor cantidad de bits por pixel nuestra maquina necesitara mas recursos para trabajar ademas tendremos que ver que la resolución sea soportada por nuestro monitor, etc. Algunos modos conocidos: Ancho x Alto x BPP 320x200x8 (nuestro tan querido modo 13h (si alguno jugo con un family game (consola de 8 bits, o si son mas retro un Atari :P) alguna ves debe conocerlo)) 320x240x8 (modo x) 640x480x16 (la configuración de la SNES y GENESIS (otro lindo recuerdo) 800x600x32 (800 pixeles de ancho x 600 pixeles de alto a 32 bits por pixel) etc. Por ejemplo supongamos que estamos trabajando con el siguiente modo de video, 800x600x32 y queremos conocer cuando memoria ocupa una imagen con las mismas dimensiones que la resolución seleccionada, entonces el tamaño que ocupará será de: Tamaño = 800 x 600 x 4(1 byte = 8 bits) = 1.920.000 bytes = 1.83 Mb En los primeros juegos que aparecieron para PC, se utilizaban resoluciones muy bajas como 320x200 (también conocido como modo 13h) o 320x240 (modo x) y a 8 bits por pixel, o sea como ya sabemos disponíamos de un máximo de 256 colores. A medida que pasaron los años se empezaron a utilizar resoluciones de 640x480 o 800x600 y a profundidades de color más altas, de 16 o 32 bits, todo esto gracias a que aumentaron las capacidades de las tarjetas de video. 10
  • 11. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Hoy en día, en la mayoría de los juegos tenemos la posibilidad de elegir el modo de video que mejor se adapte a nuestro equipo. Existen algunos casos típicos, como cuando queremos tener el mejor rendimiento en nuestro video juego, bajamos la resolución al mínimo o a una resolución intermedia. Al contrario, cuando disponemos de un buen equipo y una buena tarjeta de video, lo más probable es que seleccionemos un modo de video más alto, para disfrutar de unos gráficos de mejor calidad. Sprite Un sprite (no me gusta usar su posible traducion 'Duende') es cualquier objecto que aparece en nuestro juego aunque normalmente nos referimos a las imágenes de los personajes, los sprites pueden ser estaticos (los tiles del mapa) o dinámicos (un personaje de nuestro juego). Normalmente un sprite trae consigo un conjunto de atributos los mas comunes, imagen y posición en pantalla. Transparencia: Color-Key Cuando mostramos una imagen en pantalla sabemos que siempre se vera como una rectángulo pero sabemos que tiene dentro representado un objecto o personaje, al dibujar esta imagen queremos ver solamente la forma representada, para ello debemos elegir algún color transparente, pintar con ese color las zonas que no queremos que se dibujen en pantalla y luego dibujar la imagen ignorando dicho color. Normalmente utilizamos el color magenta, (su valor en RGB es (255, 0, 255)) como color de transparencia ya que es muy poco probable que se encuentre en nuestra imagen. Pero no solo usar un color como el magenta es la solución para no ver una imagen en su forma original, también podemos hacer uso de las propiedades del formato gráfico PNG (Portable Network Graphics), ya que este formato guarda un canal alpha con las partes transparentes de la imagen. Transparencias: Máscara Existe otro método para ignorar un color en una imagen, el uso de una máscara que se antepone al Bitmap original, es decir, debemos tener otro Bitmap que indica cuales son los pixeles transparentes. El color que indica la transparencia es el negro, y el color blanco la figura que queremos mostrar. Por lo tanto, al dibujar la imagen, recorreremos cada pixel de la máscara, y si este color es blanco, mostraremos el pixel del Bitmap original que se 11
  • 12. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com encuentra en esa posición. Transformaciones Cuando dibujamos un sprite en pantalla, tenemos la posibilidad de aplicar algunas transformaciones, las más usadas son las siguientes: Transformaciones: Translacion Esta es la transformación más simple, corresponde a cambiar la posición del sprite para luego dibujarla en otro lugar de la pantalla, dando el efecto de movimiento, sin duda lo más usado en cualquier video juego Y se resume en asignar una nueva posición a las coordenadas (x, y) del sprite. Por ejemplo si las variables x e y son las coordenadas de la esquina superior izquierda del sprite, y vx, vy las velocidades en cada eje, con una simple suma en cada componente cambiaremos la posición del sprite. x = x + dx y = y + dy Transformaciones: Rotación Otra transformación típica, que consiste en girar el sprite un número determinado de grados. Se usa para mostrar objetos vistos desde otro ángulo, por ejemplo en el video juego Micro Machines, cuando doblamos cambiamos el ángulo del auto y luego este cambio lo vemos reflejado en la pantalla gracias a la rotación. Transformaciones: Scaling Otra transformación muy usada en algunos video juegos, consiste en escalar una imagen, es decir, cambiar su tamaño, normalmente proporcional. 12
  • 13. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com En la imagen anterior nos damos cuenta que al aumentar su tamaño, se produce un efecto no deseado en los bordes de la imagen, conocido como aliasing, es decir, las líneas o curvas que forman los bordes de la imagen se ven discontinuas (en forma de escalera). Para esto existe una solución, el antialiasing, una técnica que permite suavizar todos los bordes y así disminuir el efecto de escalera. En toda API gráfica encontraremos una función que realice esta tarea. Transformaciones: Flipping El flipping es un tipo de transformación especial para realizar algunos efectos. Básicamente existen dos tipos, Vertical Flip que corresponde al efecto que se produce cuando se refleja un objeto en el agua y Horizontal Flip que corresponde al reflejo de un objeto en un espejo. Con la siguiente imagen quedará mucho más claro. Alpha blending Es una técnica para crear transparencia en la imagen, para ello se agrega un cuarto canal (Alpha) esta técnica se puede aplicar a un Bitmap completo o solo a un grupo de pixeles. 13
  • 14. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Sistema de coordenadas 2D Es importante saber que cuando dibujamos algo en pantalla, siempre tendremos que informar la posición en la cual dibujaremos el objeto. Por defecto la posición de un objeto se encuentra en la esquina superior izquierda, pero algunos prefieren usar como punto de anclaje el centro, y en general puede ser cualquier otro punto. Calcular el centro del punto es tan simple como sumar a la posición x, la mitad del ancho del objeto y a la posición y, la mitad de la altura del objeto. Nosotros estamos acostumbrados a trabajar en el cuadrante I del plano cartesiano, donde las coordenadas del eje "x" crecen hacia la derecha y las coordenadas del eje "y" crecen hacia arriba, pero al trabajar con gráficos en el computador, esto es relativamente distinto, ya que el eje y se invierte, es decir, ahora el mundo está al revés, las coordenadas en el eje "y" crecerán hacia abajo. En la siguiente imagen podemos ver el plano cartesiano en su forma normal versus el plano cartesiano utilizado en la programación gráfica. Sistema de coordenadas Cartesianas 14
  • 15. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com Sistema de coordenadas utilizado en la Programación Gráfica Como vemos las api gráficas solo muestra el primer cuadrante solo que rotado 180 grado, ademas algo importante a tener en cuenta es que para las coordenadas de los objectos solo se puede utilizar valores enteros. Sincronización en los video juegos Lo ideal en cualquier video juego, es que todos los objetos se muevan a la misma velocidad, independiente de la velocidad del computador donde se ejecute. Si no nos preocupamos por esto, y ejecutamos nuestro video juego en un computador antiguo, por ejemplo, en un Pentium de 200 Mhz, probablemente el video juego se vea muy lento, en cambio si lo ejecutamos en un computador con un procesador de última generación se verá tan rápido que será imposible jugar. Para solucionar este problema, disponemos de dos métodos. Sincronización por Framerate El primer método, consiste en sincronizar el framerate, también conocido como FPS o Frames per Second (Cuadros por segundo). Al hablar de FPS, nos referimos a la frecuencia con que se ejecuta el ciclo principal de un video juego en un segundo. A mayor cantidad de FPS obtendremos una mayor fluidez en las animaciones. En el cine se considera que una velocidad de 24 FPS es suficiente para que el ojo humano perciba una animación fluida, pero en los video juegos esta cantidad es demasiado baja. Valores adecuados son sobre 60 o 100 FPS. 15
  • 16. Curso de: Programacion de Juegos con PyGame Por: Ricardo D. Quiroga – L2Radamanthys → l2radamanthys@gmail.com El método es bastante sencillo, y lo primero que debemos hacer cuando comienza el ciclo del video juego, es obtener el tiempo transcurrido hasta ese momento, que normalmente se mide en milisegundos. Luego procesamos lo relacionado al video juego, ya sea entrada, IA, lógica del juego, detección de colisiones, dibujo de gráficos, etc. y antes de terminar el ciclo, creamos otro loop en el cual vamos obteniendo el tiempo transcurrido hasta ese momento, calculamos la diferencia de tiempo y verificamos si es menor a los FPS que buscamos. De esta forma cada vez que ejecutemos el programa en una máquina diferente, el programa esperará el tiempo adecuado para obtener los FPS. Utilizando este método, en computadores más rápidos se verá más fluido, pero si lo ejecutamos en una máquina con un procesador mucho más antiguo del que usamos para desarrollarlo, lo más probable es que se vea bastante lento. Claro, no todo podía ser perfecto, pero es por eso que los video juegos piden algunos requerimientos mínimos. Sincronización por Tiempo El segundo método consiste en sincronizar en base al tiempo. En este método no importa el framerate que posea el video juego, pero aun así los objetos se moverán a la misma velocidad en todas las máquinas. Este método se usa bastante en video juegos 3D, ya que el framerate varía mucho en cada ciclo, dependiendo de la cantidad de objetos que se deban renderizar. Pero este método también tiene su desventaja, a pesar de que los objetos se mueven siempre a la misma velocidad, en un computador más lento, el desplazamiento no se verá fluidamente. Esto se aprecia en el ejemplo que ya vimos, en el caso extremo de demorarse 1 segundo cada ciclo, cada vez que se deba mover un objeto, este aparecerá 5 pixeles más a la derecha, produciéndose un salto muy notorio. En computadores aun más lentos, se comenzará a ver un parpadeo en el desplazamiento de los objetos. Pero como ya dijimos nuestro video juego siempre tendrá unos requerimientos mínimos y tendremos que seleccionar el método que más nos acomode. Pero claramente el primer método, Sincronización por framerate, es el más simple y el más extendido. Resumen Hemos aprendido varios conceptos, que nos ayudarán a comprender mejor la programación gráfica que se usa en los video juegos 2D. Todos estos conceptos se pueden aplicar a cualquier biblioteca gráfica, muchas de las cosas que vimos ya vienen implementadas, como por ejemplo setear un modo de video, obtener un color, realizar operaciones de blitting, efectos de alpha blending, usar transparencias por color keys, transformaciones como rotación, escalado, traslación, page flipping, etc., por lo tanto no será necesario que escribamos código para esto, pero conviene conocer su funcionamiento. 16