Ejemplos de bloques de física
Ejemplo para la creación de una caja:
Crear un 'brush' a cierta altura del suelo con la forma de la caja y hacerlo 'model' bajo un nombre cualquiera, por ejemplo 'caja1'.
Crear una entidad 'PhysicsObject' (supongamos que nos crea la entidad 'PhysicsObject1') y en esa entidad:
Model:
caja1
Crear una entidad 'PhysicalSystem' y en esa entidad:
physicsObjectListHeadPtr:
PhysicsObject1
Ejemplo para la creación de una plataforma basculante en su punto central:
Crear un 'brush' con la forma de la plataforma y hacerlo 'model' bajo un nombre cualquiera, por ejemplo 'plataforma'.
Crear una entidad 'PhysicsObject' (supongamos que nos crea la entidad 'PhysicsObject2') y en esa entidad:
Origin:
(Es importante situar esta entidad en el punto que deseamos bascular o pivotar el 'model')
Model:
plataforma
mass:
600
angularDamping:
0.00005
ascensorObjeto:
False
isAffecteBDYGravity:
1
tiempoAvance:
0
tiempoRetroceso:
0
Crear una entidad 'PhysicsJoint' (supongamos que nos crea la entidad 'PhysicsJoint5') y en esa entidad:
Origin:
(Es importante situar esta entidad en el punto que deseamos bascular o pivotar el 'model')
assemblyRate:
0.03
jointType:
0
physicsObject1:
PhysicsObject2
Crear una entidad 'PhysicalSystem' y en esa entidad:
physicsObjectListHeadPtr:
PhysicsObject2
jointListHeadPtr:
PhysicsJoint5
Ejemplo para la creación de un bloque de física con un eje de rotación definido por dos puntos (para columpios, ruedas, etc..):
Crear un bloque 'brush' con la forma del objeto y hacerlo 'model' bajo un nombre cualquiera, por ejemplo 'rueda'.
Crear una entidad 'PhysicsObject' (supongamos que nos crea la entidad 'PhysicsObject3') y en esa entidad:
Origin:
(Situar esta entidad en el centro del eje de rotación que queremos definir para el 'model')
Model:
rueda
mass:
400
angularDamping:
0.00005
ascensorObjeto:
False
isAffecteBDYGravity:
1
tiempoAvance:
0
tiempoRetroceso:
0
Crear una entidad 'PhysicsJoint' (supongamos que nos crea la entidad 'PhysicsJoint6') y en esa entidad:
Origin:
(Situar esta entidad en un extremo del eje que se quiere definir para rotación del 'model')
assemblyRate:
0.03
jointType:
0
physicsObject1:
PhysicsObject3
Crear otra entidad 'PhysicsJoint' (supongamos que nos crea la entidad 'PhysicsJoint7') y en esa entidad:
Origin:
(Situar esta entidad en el otro extremo del eje que se quiere definir para rotación del 'model')
assemblyRate:
0.03
jointType:
0
physicsObject1:
PhysicsObject3
Next:
PhysicsJoint6
Crear una entidad 'PhysicalSystem' y en esa entidad:
physicsObjectListHeadPtr:
PhysicsObject3
jointListHeadPtr:
PhysicsJoint7
Ejemplo para la creación de péndulos o cuerdas:
Igual que para crear las plataformas basculantes pero en este caso el 'brush' ha de ser alargado de Y (alto) y estrecho de X y Z (ancho y largo).
La entidad 'PhysicsJoint' ha de situarse en el centro de X y Z del 'model' pero de Y ha de situarse bastante por encima del máximo de Y del 'model'. Si se pone
demasiado abajo el efecto de balanceo no quedará bien.
Poner menos 'mass' en el 'PhysicsObject' para que sea más fácil moverlo.
¿ Qué se puede hacer con estos bloques de física en un juego ?:
- Los bloques de física pueden ser cualquier 'model' que definamos en World Editor, por lo que podrán tener cualquier forma que seamos capaces de modelar en World Editor.
- Los rebotes, pesos, flotabilidad, velocidades de desplazamiento, si lo puede levantar el jugador o no, si da vueltas o no, si le afecta la gravedad, si el jugador lo puede usar como
ascensor controlado por él mismo, si responde a fuerzas externas, etc .... se puede configurar individualmente para cada bloque de física.
- Estos bloques de física siempre tienen que ser sólidos (SOLID en World Editor) aunque podrán atravesar (o hundirse en) bloques vacíos (EMPTY en World Editor). Puedes
crear un 'model' combinando bloques 'Solid' y 'Empty', por ejemplo para hacer la parte 'Empty' de lava para que pueda dañar al jugador si le toca.
- No hay problemas para que los bloques de física sean semitransparentes ya que eso sólo depende del nivel de transparencia que le demos a las caras de la texturas.
- Se puede hacer que cada bloque de física lance un fichero de comandos diferente al colisionar con un 'model' del nivel, aunque este 'model' no podrá ser otro bloque
de física.
- En principio, los bloques de física pueden ser empujados tanto por el jugador como por los enemigos, aunque es configurable que los bloques de física no sean alterados por
los enemigos. No es tan realista pero en ocasiones nos puede interesar que ese factor aleatorio no se produzca si esperamos que el jugador se encuentre ciertos bloques en una
posición en concreto.
- El jugador, a parte de poder empujar los bloques de física hacia cualquier dirección, también puede elevarlos, lanzarlos y tirar de ellos. Todas estas acciones
se controlan mediante dos teclas configurables.
- El jugador puede apilar bloques y subirse a ellos.
- Los bloques de queramos podemos hacerlos ascensores para que el jugador pueda usarlos como ascensores controlados por la tecla de elevar bloque, pero seguirán siendo
bloques que podrá mover, elevar o tirar de ellos.
- Cada bloque se puede configurar para que flote en líquidos (agua o lava) o para que por el contrario se hunda hasta el fondo.
- Los bloques de física sólo se mueven por la acción del jugador, enemigos o personajes secundarios debido a sus pesos, sus disparos o sus colisiones.
- Se pueden definir bloques para que no tengan gravedad al dar comienzo la aventura y que la tengan sólo cuando el jugador les dispare. Esto se
puede usar para colgar bloques de paredes o techos para que caigan al ser alcanzados por los disparos del jugador.
Para ver ejemplos prácticos y más detallados, en World Editor abre el nivel 'fisica_test' y observa como se usan las diferentes entidades y 'models' y como
se relacionan entre ellas.