From BlenderWiki

Jump to: navigation, search

Blender 2.66: Motor de juegos

Dinámicas de personajes

  • Se agregó una propiedad maxJumps al controlador de personaje para ajustar cuántos saltos puede realizar un personaje antes de tocar el suelo. De forma predefinida se establece en 1, lo que significa que un personaje solo puede saltar una vez antes de tener que tocar el suelo nuevamente. Definir esto a 2 permite realizar un doble salto.
  • Se agregó una propiedad jumpCount al KX_CharacterWrapper. Esto puede ser usado para tener diferentes lógicas para un salto, frente a un doble salto. Por ejemplo una animación diferente para el segundo salto.
  • El motor de juegos de Blender ahora usa un comportamiento predefinido menos "fltante" para la gravedad del controlador del personaje.
  • Se agregó un tipo de Movimiento de personaje al actuador Movimiento con controles específicos para personajes. Esto incluye movimiento, rotación y saltos.
Captura del actuador de Movimiento de personaje, nuevo de la versión 2.66.
  • Se agregó una propiedad KX_CharacterWrapper.walkDirection para definir la dirección y velocidad del personaje. Se cambió KX_GameObject.applyMovement() de vuelta al antiguo comportamiento de la versión 2.64 para los controladores de personaje. En la versión 2.65, applyMovement() usaba la función walkDirection por debajo y eso causaba algunos problemas.

Perfilador

Las propiedades de perfilamiento y depuración han sido revisadas y se han agregado barras visuales para hacer más obvios los cuellos de botella.

Captura de los cambios del Perfil del motor de juegos de la versión 2.66

Sombras alfa

Se agregó un soporte preliminar del uso del canal alfa en sombras para las sombras de tipo Simple. No funciona en las vistas, ni con las sombras de tipo Varianza.

Sombras de tipo Simple con alfa en Blender 2.66

Carga asincrónica de bibliotecas

Ahora la carga de bibliotecas puede ser realizada de forma asincrónica. Esto significa que la carga es hecha por una vía independiente para evitar que el motor de juegos se paralice. Aquí hay un ejemplo extraído de la documentación:

# Print a message when an async LibLoad is done
import bge

def finished_cb(status):
    print("Library (%s) loaded in %.2fms." % (status.libraryName, status.timeTaken))

bge.logic.LibLoad('myblend.blend', 'Scene', async=True).onFinish = finished_cb

La función LibLoad() ahora devuelve un objeto KX_LibLoadStatus para obtener información acerca de la carga de la biblioteca. LibNew() y LibFree() no se ven afectadas por esto. En otras palabras, la opción asincrónica solo funciona con LibLoad(). Más aún, solo funciona con escenas, no con acciones o mallas.

NOTA: Esta característica aún es experimental y puede ser inestable con ciertas escenas.

Mandos de juego con Python

Se agregó una interfaz para manejar mandos de juego sin necesidad de bloques lógicos. Estos nuevos objetos SCA_PythonJoystick pueden ser accedidos usando bge.logic.joysticks, que es una lista de mandos de juego. La longitud de la lista es el número máximo de mandos de juego soportados y los índices que no tengan un mando disponible se establecerán como None. Esto significa que los mandos de juego pueden ser comprobados usando algo como:

if bge.logic.joysticks[0]:
    activate_player_one()

if bge.logic.joysticks[1]:
    activate_player_two()

# etc..

La interfaz expuesta por SCA_PythonJoystick es muy similar al bloque lógico que comprueba mandos de juego, excepto por una diferencia clave: los valores de los ejes están normalizados a un rango de -1.0 a 1.0, en vez de usar de -32767 a 32767, que es lo que expone el bloque lógico.