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.