Download Presentación de PowerPoint

Document related concepts
no text concepts found
Transcript
Taller Central
9. Videojuegos 2D.
Contenidos




Primeros Pasos.
Gráficos 2D.
Escenarios 2D
Rendering.
Pixel
 Picture element.
 Es la menor unidad que se
compone una imagen digital.
Bitmap
Gráficos vectoriales v/s matriciales
Gráficos vectoriales v/s matriciales
Sprite
 Sprite = Bitmap + datos asociados.
 Cualquier objeto que aparece en nuestro
videojuego.
 Puede ser estático o dinámico.
 Entre los datos podemos encontrar: posición
2d (x,y), tamaño (ancho, largo), dirección,
ángulo, etc.
Sprite: Transformaciones
Animación de Sprites
 Se logra repitiendo la secuencia.
 Se le denomina Frame a una de las imágenes que forman parte de la
animación.
 El número de frames dibujados en un periodo de tiempo se le llama frame
rate, esto es la velocidad de la animación del sprite.
Animación de Sprites
 La totalidad de frames que
determinan a un personaje se
denomina sprite sheet, el cual
generalmente está en un solo archivo
(imagen) .
Transparencia por ColorKey
 Utilizando un color de transparencia se evita que los sprites se vean
rectangulares.
 Por lo general se utiliza el color magenta, rgb (255, 0, 255), ya que es poco
probable que se encuentre en una imagen.
 Nota: hoy en día si se trabaja con archivos «png» se puede utilizar el canal alpha.
Alpha Blending
 Técnicas para crear transparencia en una imagen con respecto al fondo.
 Si bien en el formato «png» se cuenta con el canal alpha, las librerías
gráficas cuentan con esta función a nivel de hardware para así poder
cambiarlo de forma dinámica.
Screen Buffer
 Es el área de memoria de video, donde podemos dibujar algo que se verá
en pantalla
800 x 600 x 4 = 1.92 mb
Blitter
 Operación para transferir un sector de bytes (bitmap) de un sector de
memoria a otra, y es una forma de renderizar (dibujar) sprites en el screen
buffer.
 Ésta es una de las operaciones más criticas para el videojuego, ya que es la
operación más costosa y gracias a ella podemos armar la escena.
Blitter
Double Buffering
 La imagen no se pinta instantáneamente en la pantalla, sino que se hace
pixel por pixel, desde la esquina superior izquierda, y es tan rápido que el
ojo humano no lo percibe.
 El problema viene cuando se blitea en el screen buffer y al mismo tiempo
se está actualizando la imagen, produciéndose una sensación de
parpadeo, o superposición de imágenes.
 A este problema de parpadeo de pantalla se le denomina flickering.
Double Buffering
 Una solución es esperar que se pinte totalmente en pantalla y luego
realizar el blitter, secuencialmente.
 Para evitar totalmente el flickering, utilizamos la técnica de double
buffering, que consiste en tener 2 áreas de memoria en la ram. Una de
estas zonas se conoce como front-buffer, y corresponde a la que se
muestra actualmente en pantalla, y por otro lado tenemos a back-buffer,
que es donde dibujamos los objetos que formarán la escena.
 El truco es que las áreas de memoria para front-buffer y back-buffer se
van intercalando.
Double Buffering
Dirty Rectangles
 Para optimizar el double buffering, nos damos cuenta que muchas veces
hay sólo rectángulos en que cambia la imagen de un frame a otro, para
ello, se puede pintar sólo ese rectángulo en pantalla, lo que aumenta
considerablemente el rendimiento.
 Si los sprites que se están moviendo son muchos, no es recomendable
esta técnica, debido a que serían muchos los rectángulos que tendrían
que copiarse a la pantalla, y para ello sería mejor utilizar sólo double
buffering.
Background Utilizando 1 imagen
Background utilizando 1 imagen
Background utilizando un conjunto de imágenes
Más imágenes background en http://www.panelmonkey.org
Background utilizando un conjunto de imágenes
Paradox Mapping
 Se usan varios planos que se mueven a distintas velocidades, lo más
cercanos más rápido.
Paradox Mapping
Background: Problemas
 Si se diseñan videojuegos para dispositivos con recursos limitados, no es
recomendable utilizar background, debido a la memoria que éste utiliza
para la imagen, más aún si se desea utilizar backgrounds con capas.
 Si se desea interactuar con el «mundo»: pasar por debajo de un árbol, no
poder atravesar ríos, chocas con casas, recompensas ocultas, etc. No es
posible diseñarlo fácilmente utilizando sólo background, de hecho, no es
recomendable diseñarlo con backgrounds.
Tile Engine
 En el mundo virtual, los escenarios utilizan repetición de patrones: las
mismas casas, los mismos árboles, el mismo color de cielo, etc.
Tile Engine
 Tile: pequeña imagen que se repite para formar una más grande.
1
2
3
4
 TileSet: conjunto de tiles con lo que se forma una imagen.
1
2
Tile Engine
Tile Engine
 Layer: cada capa que conforma una parte visible o no del mapa.
Tile Engine
 Vistas isométricas: vista en perspectiva o lateral levantada =>
implementado con tiles, pero por niveles: piso, objetos y personajes. Pinto
cada nivel de atrás hacia adelante, partiendo por el piso y luego objetos y
personajes.
Videojuegos de Tablero
http://www.freewebs.com/cheoss/representacionTablero.html
Tile Engine
 Vistas isométricas.
Tile Engine : Herramienta
 Tile Studio
Collision Detection
 Conjunto de algoritmos matemáticos que nos permiten detectar
si 2 objetos están colisionando.
 Sin ellas podemos decir que NO puede existir un videojuego.
 El algoritmo varía dependiendo de la forma de los objetos, del
tipo de videojuego que se desarrolla y de la perfección que se
desee obtener.
 El algoritmo clásico es collisión box, y hoy en día se utiliza perpixel-collision.
Detección de Colisiones Entre Círculos
Detección de Colisiones Entre Círculos
Hay colisión
No hay colisión
Fuente: http://juank.black-byte.com/xna-colisiones-2d/
Hay colisión
Collision Box
Collision Box
Fuente: http://juank.black-byte.com/xna-colisiones-2d/
Colisiones por partes
Per-Pixel-Collision
 Es la detección de colisiones «perfecta»
(la más realista) para videojuegos 2D,
pero tiene la ventaja de ser «costosa».
 La detección de colisiones se realiza por la
superposición de los pixeles entre 2
sprites.
 Primero se realiza collision box, y de
haber colisión, se utiliza Per-PixelCollision.
 Para más información:
http://www.significant-bits.com/the-1-pixel-collision-box
Ahora «sólo» debemos aplicar
esto a nuestros videojuegos…