PROYECTO SAI BATALLA NAVAL - COMPONENTES

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013 PROYECTO SAI – BATALLA NAVAL - COMPONENTES Thomas Manrubia y Elena Burdiel Thomas Manrubia y Elena Bur

3 downloads 168 Views 2MB Size

Recommend Stories


Sai Vedas. Sai Tres Parte I Organización Sri Sathya Sai Baba de Argentina
Sai Vedas Sai Tres Parte I Organización Sri Sathya Sai Baba de Argentina “Como el alimento para un hombre hambriento, como las lluvias sobre un cam

Tras la batalla de Austerlitz. Proyecto de musealización
Tras la batalla de Austerlitz. Proyecto de musealización Trabajo de Fin de Grado Autora: Patricia Bou Pérez Director: Cèsar Carreras Monfort Grado de

Story Transcript

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

PROYECTO SAI – BATALLA NAVAL - COMPONENTES Thomas Manrubia y Elena Burdiel

Thomas Manrubia y Elena Burdiel

1

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

PROYECTO SAI - COMPONENTES Batalla Naval en las Neveras ALUMNOS ► Elena Burdiel Pérez ►Thomas Manrubia Fuet

TIPO DE PROYECTO Blender Game

COMPONENTES

RESULTADO DE APRENDIZAJE ► Apuntar con

el ratón.

► Profundizar en

la lógica con objetos



Texture painting



Addons

► Utilización

de texturas realizadas a partir de video renderizado previamente.

► Programación

en python.

► Combinación de programación en python y logic bricks para el manejo de acciones. ► Estado “idle”.

ELEMENTOS ► Luces ► Cámaras ► Mar

Thomas Manrubia y Elena Burdiel

2

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

► Islas ► Torretas ► Armas ► Profesores ► Llave ► Cofre ► Barcos

DESARROLLO Se parte del fichero base.blend. Se elimina el cubo (tecla x) y se deja el resto de elementos: Lamp, Lamp.001, Lamp.Fill, Camera y Floor. Se comprueba que están situados en su capa correspondiente (apartado ELEMENTOS) y, de no ser así se corrige (tecla m y se elige la capa). A continuación se procede a crear el resto de elementos (serán una versión muy básica, que irá mejorándose en otras fases de diseño del juego). ESCENARIO Se crea el escenario descrito en la figura 1 a partir de cubos. Más adelante se modelarán como corresponde. Todos estos elementos han de situarse en la capa 3. Se crean (shift a -> mesh -> cube) y se les da su tamaño (s x, s y, s z) y posición (g x, g y, g z) correspondiente. Según se crean se les da su nombre correspondiente (panel de propiedades -> object). Mar: 72x123x2 unidades blender. Islas: 12 islas de tamaño variable. Muelles: 2 muelles de 12x6x4 unidades blender. OBJETOS Se crean los objetos descritos en la figura 1 a partir de cubos. Más adelante se modelarán como corresponde. Todos estos elementos han de situarse en la capa 2. Se crean (shift a -> mesh -> cube) y se les da su tamaño (s x, s y, s z) y posición (g x, g y, g z) correspondiente. Según se crean se les da su nombre correspondiente (panel de propiedades -> object). Barco: 9x5x4 unidades blender. Barco_enemigo: 9x5x4 unidades blender. Partes_arma: 3 partes del arma. Esferas de diámetro 5 unidades blender. Cofre: 7x3x4 unidades blender.

Thomas Manrubia y Elena Burdiel

3

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013 Para poder distinguir estos elementos fácilmente se les dota además de un material característico (propiedades -> material).

Figura 1

CREACIÓN DE UNA ISLA Se va a utilizar la malla “landscape”. Por defecto no está disponible, pero puede conseguirse haciendo lo siguiente: ►

Ve a la ventana User preferences (figura 2)



Pincha en Addons y busca “landscape”. Por último selecciona el cuadrito a la derecha (en el nombre) para habilitarlo (figura 3).

Figura 2

Thomas Manrubia y Elena Burdiel

Figura 3

4

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013 Vuelve a la ventana3D View y crea una nueva malla seleccionando lansdcape (Shift+A > Mesh -> Landscape). Si resulta demasiado pequeña, escálala (tecla “s” + número). Tiene muchos vértices por lo que hará que nuestra isla “pese” mucho. Para reducir vértices, aplicamos el modificador Decimate como se muestra en la figura 4 y figura 5:

Figura 4

Figura 5

Se han reducido notablemente el número de vértices (y caras), pero el aspecto es el de una isla llena de rocas. Como la isla estará cubierta de arena, es necesario suavizar la superficie. Para ello se usa el Smooth (tecla T -> Shading -> Smooth) en modo objeto. Para obtener un suavizado aún mayor se usa Smooth Vertex (tecla T -> Deform-> Smooth Vertex) en modo edición (figura 6 y figura 7).

Figura 6

Figura 7

Texture painting Una opción es utilizar una imagen como textura como se ha visto en clase (añadir textura y utilizar mapa UV), pero el resultado obtenido puede ser un poco malo. Otra opción es utilizar Texture Painting, es decir, usar texturas como pinceles, tal y como se explica a continuación:

Thomas Manrubia y Elena Burdiel

5

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

Figura 8

Figura 10

Figura 9

Figura 11

Se entra en U/V Image Editor (figura 8) y se crea una nueva textura (figura 9). Por otro lado, en Modo edición: Mesh ->UV Unwrap -> Unwrap. A continuación se selecciona el modo Texture Paint (figura 10) y dentro de las herramientas (tecla T), dentro de Texture, se crea una nueva textura (figura 11). A continuación, dentro de la ventana Properties, en Textures se selecciona la textura que acabamos de crear, tipo image or movie, y se le asigna la imagen que deseemos para nuestra textura (figura 12). El radio del “pincel” se puede seleccionar en herramientas (tecla T) -> Radius (figura 13). Se recomienda usar un tamaño intermedio: no muy pequeño para no estar mucho tiempo pintando ni muy grande para poder aprovechar la herramienta correctamente. Se puede pintar sobre el propio objeto o sobre la textura, en la ventana U/V Image Editor, habilitando el modo image painting (figura 14). Como consejo, es recomendable usar una textura “tileable”.

Thomas Manrubia y Elena Burdiel

6

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

Figura 12

Figura 13

Figura 14

BREVE DESCRIPCIÓN DE LOS ELEMENTOS MÁS IMPORTANTES CÁMARAS En la escena “Principal” hay tres cámaras: una para el mapa y dos para el barco. Después, hay una cámara para cada escena (“Ganar, “Menu”, “Vida”,etc)

ESCENAS Hay un total de ocho escenas: - AnimTexto: Escena que hace que se ponga en la pantalla, volver: Letra Q. - Controles: Escena con la explicación de lso ocntroles del juego. - Ganar: Escena que aparece cuando se logra superar el juego. Permite volver al menú principal reiniciar el juego o salir. - Ins: Escena con el vídeo explciativo sobre el juego. - Menu: menú principal del juego, la primera escena que aparece al comenzar a jugar. A partir de aquí se puede acceder al juego, leer las instrucciones (comandos), ver un vídeo explicativo o salir del juego. - Perder: Escena que aparece cuando no se logra superar el juego. Permite volver al menú principal reiniciar el juego o salir. - Principal: Escena para el desarrollo de la acción del juego. - Vida: Escena que pone la información del angulo de tiro, la vida, cuantas torretas se han destruído.

Thomas Manrubia y Elena Burdiel

7

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013 ISLAS, TORRETAS; ARMAS Y PROFESORES Hay once islas en el mar: diez islas “de los profesores” y una onceava en la que se encuentra el cofre. Cada isla “de los profesores” tiene una torreta. En cada torreta se encuentra vigilando un profesor, el cual dispone de un arma (ametralladora). El funcionamiento es el siguiente: el arma dispara al barco del alumno cuando este sobrepasa un determinado radio de cercanía. Según se mueve el barco, el arma rota para intentar alcanzarlo con los disparos. Si el alumno intenta disparar a las torretas, transcurrido un tiempo ellas también dispararan, esto lo hacen para poder protegerse cuando se les dispara y ser difícilmente destruidas. El alumno puede evitar ser alcanzado por los proyectiles disparando sobre los que vienen encima, por eso la velocidad de los proyectiles es lo suficientemente lenta como para verlos y poderles disparar y así evitar que los impactos quiten vida al alumno. El profesor se encuentra emparentado con el arma, de manera que también rota siguiendo el movimiento del barco del alumno. Cuando el arma no ha detectado al alumno, el profesor se encuentra ejecutando una animación “idle”. Cabe destacar que los profesores tienen un modelado naif, dado que la atención del juego no se centra en ellos. Texturado del profesor El modelao del profesor, al igual que la creación y animación de su esqueleto, no es muy relevante, ya que es muy similar a lo realizado con el ejercicio del “Tortugo”. Sin embargo, el texturado puede resultar algo más complicado, debido a que se utilizan varias texturas para un solo personaje. Para ello es necesario crear tantos materiales y mapas de coordenadas U/V como texturas diferentes se vayan a utilizar. El procedimiento es el siguiente: - En propiedades, en material, se añade un nuevo material (figura 15) y se le pone un nombre significativo. - En modo edición, se seleccionan las partes de la malla que se quieran utilizar en la textura y se hace acepta la selección con Assing (figura 15, encima del recuadro 4, izq). - En Object Data, se crea un nuevo mapa U/V con nombre significativo (figura 16) - En textures se crea una nueva textura, dotándola de un nombre significativo, se elige su tipo y, si es necesario, demás características (figura 17).

- Por último, se accede al escritorio 4 UV y se procede como se ha visto en los ejercicios de texturado realizados en clase.

Thomas Manrubia y Elena Burdiel

8

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

Figura 15

Figura 17

Figura 16 MAR En el documento “PROYECTO SAI – BATALLA NAVAL - FUENTES” se indican los tutoriales utilizados para la creación del mar. En el juego “la batalla naval” se han usado 4 empty para animar en vez de 2 para que el mar sea más realista. BARCOS Hay dos barcos en el juego. Uno de ellos es el barco del alumno. Su funcionamiento se describe en la figura 18.

Figura 18

El otro barco es el barco enemigo. Sigue al barco del alumno por el escenario del juego, disparándolo.

Thomas Manrubia y Elena Burdiel

9

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

PROGRAMACIÓN EN PYTHON Para aprender a programar en python se han utilizado un conjunto de páginas y videos que cubren los aspectos más fundamentales de la programación en python. Pueden consultarse en el documento “PROYECTO SAI – BATALLA NAVAL - FUENTES”. MARCADORES Se disponen de los siguientes marcadores para conocer en todo momento los logros en el juego: -Vida del alumno: se comienza con 100 puntos. Se pierden 10 puntos cada vez que es alcanzado por un disparo. Al llegar a 0 puntos se pierde el juego. -Llave: Recuento de las partes de la llave obtenidas hasta el momento -Ángulo de disparo: indica el ángulo con el que está apuntando el cañón. Se actualiza según se mueva el ratón para apuntar. - Dirección del barco: disponible solo desde la vista del cañón. ASPECTOS INTERESANTES Cómo acceder directamente al teclado sin los sensores keyboard Se puede acceder directamente a las teclas utilizando los módulos Game Logic (bge.logic) y Game Keys (bge.events) del Game Engine. Se ilustra este proceso con un ejemplo para su mayor comprensión. Pretendemos realizar una determinada acción al pulsar la tecla “W” del teclado, para ello utilizaremos una expresión condicional: if bge.logic.KX_INPUT_ACTIVE == bge.logic.keyboard.events[bge.events.WKEY]: Para otras teclas se puede reemplazar el contenido entre corchetes por la tecla correspondiente.

Thomas Manrubia y Elena Burdiel

10

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

Cómo controlar la vista o un objeto con el ratón En esta parte se empleará a modo de ejemplo un script simplificado. Partimos del archivo por defecto de blender realizamos las siguientes modificaciones: - Seleccionamos Blender Game en vez de Blender Render. - Duplicamos el cubo por defecto y situamos otro cubo encima de este. - Renombramos el cubo que esta abajo con el nombre “cubo01” y el que está encima con “cubo02”. - Se crea una cámara y se sitúa encima del cubo02 (encima de los dos cubos) - Se sitúa enfrente de la cámara un objeto “Monkey” para ver cómo se mueve la cámara. - Se emparenta la cámara con el cubo02 y el cubo02 con el cubo01 - En el Logic Editor del cubo01 añadimos dos sensores “Always” y “Mouse” y un controlador python tal y como se muestra en la figura 19. (Hemos abierto una ventana Text Editor y creado un documento movimiento.

Figura 19

Thomas Manrubia y Elena Burdiel

11

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

Ahora pegaremos el siguiente código comentado en“movimiento.py” import bge from bge import render as R cont = bge.logic.getCurrentController() #Se importa el controlador cubo01 = cont.owner scene = bge.logic.getCurrentScene () cubo02 = scene.objects['cubo02'] #Se importan los objetos de la escena que van a ser movidos por el raton raton = cont.sensors['Mouse'] #Se importa el sensor del raton R.showMouse(False) #Se escoge si se muestra el raton o no cz= R.getWindowWidth()//2 # Se obtiene el centro de la pantalla cy= R.getWindowHeight()//2 lat = 0.7 # latencia del movimiento 0: no latencia. 0.99: mucha latencia s = 0.5 #sensibilidad del raton 0.0 a 1.0 recomendado if 'rz' not in cubo01:

cubo01['rz']=0.0 #Se inicializan a 0 los movimientos de las rotaciones de los ejes Z e Y cubo01['ry']=0.0 R.setMousePosition(cz,cy) #Se inicializa la posicion del raton en el centro de la pantalla else: rz= raton.position[0] #Se separa la posicion del raton en variables rz y ry ry= raton.position[1] dz= (cz-rz) #se calcula cuantos pixeles se ha movido el raton horizontalmente (respecto al centro de la pantalla) dy= (cy-ry) #se calcula cuantos pixeles se ha movido el raton verticalmente (respecto al centro de la pantalla)

Thomas Manrubia y Elena Burdiel

12

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013

cubo01['rz']= cubo01['rz']*lat + dz*(1.0-lat) #Se ajusta la latencia del movimiento del raton cubo01['ry']= cubo01['ry']*lat + dy*(1.0-lat)

rz = cubo01['rz']*(s/400) #Se ajusta la cuantia del movimiento = la sensibilidad del raton ry = cubo01['ry']*(s/400)

cubo01.applyRotation([0,0,rz],True) #se aplica la rotacion al eje Z del cubo01 cubo02.applyRotation([0,ry,0],True) #se aplica la rotacion al eje Z del cubo02 R.setMousePosition(cz,cy) #Se centra el raton para que la fuerza aplicada varie en funcion del movimiento del raton y evitar que el objeto se mueva constantemente

#Accedemos al teclado como hemos visto anteriormente para avanzar retroceder o moverse lateralmente if bge.logic.KX_INPUT_ACTIVE == bge.logic.keyboard.events[bge.events.WKEY]:

cubo01.applyMovement ((-0.1,0,0), True)

if bge.logic.KX_INPUT_ACTIVE == bge.logic.keyboard.events[bge.events.SKEY]:

cubo01.applyMovement ((0.1,0,0), True)

if bge.logic.KX_INPUT_ACTIVE == bge.logic.keyboard.events[bge.events.AKEY]:

cubo01.applyMovement ((0,-0.1,0), True)

Thomas Manrubia y Elena Burdiel

13

PROYECTO SAI –BATALLA NAVAL -COMPONENTES 2013 if bge.logic.KX_INPUT_ACTIVE == bge.logic.keyboard.events[bge.events.DKEY]:

cubo01.applyMovement ((0,0.1,0), True) Se adjunta un archivo “movimiento.blend” en el que se puede observar el funcionamiento de la cámara. Cómo generar un efecto de humo en disparos:

Se dispone previamente de una imagen “humo”, creada mediante el programa photoshop con la herramienta pincel. Para la creación del humo en el juego, cada vez que se dispara se ejecutan estas líneas en python. while i

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.