This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold incluye Box2D para simulaciones de física 2D y Bullet para física 3D. El ajuste Physics 2D del manifiesto de la aplicación selecciona Box2D Version 3, Box2D (Legacy Defold version) o None. La implementación heredada es la predeterminada; Box2D 3 es opcional. Cambiar de implementación puede alterar los resultados de la simulación y requerir que reajustes las opciones de proyecto de Box2D específicas de la versión.
El flujo de trabajo basado en componentes de objetos de colisión y el módulo physics descritos en estos manuales funcionan con ambas implementaciones de Box2D; seleccionar None elimina las físicas 2D. Defold también ofrece las API de bajo nivel b2d, b2d.body, b2d.fixture, b2d.shape, b2d.joint, b2d.chain y b2d.world para acceder directamente a cuerpos, formas, articulaciones, cadenas y mundos 2D. No todas las funciones de bajo nivel están disponibles en ambas implementaciones de Box2D; comprueba la documentación de API generada de cada función con la implementación seleccionada en el manifiesto de la aplicación.
Los conceptos principales de los motores de física usados en Defold son:
Además de los propios objetos de colisión, también puedes definir constraints de objetos de colisión, conocidos más comúnmente como joints, para conectar dos objetos de colisión y limitar o aplicar fuerza de otras maneras, así como influir en cómo se comportan en la simulación de física. Aprende más sobre joints.
También puedes sondear y leer el mundo de física a lo largo de un rayo lineal conocido como ray cast. Aprende más sobre ray casts.
El motor de física simula física newtoniana y está diseñado para funcionar bien con unidades de metros, kilogramos y segundos (MKS). Además, el motor de física está ajustado para funcionar bien con objetos en movimiento de un tamaño en el rango de 0.1 a 10 metros (los objetos estáticos pueden ser más grandes) y, por defecto, el motor trata 1 unidad (píxel) como 1 metro. Esta conversión entre píxeles y metros es conveniente a nivel de simulación, pero desde la perspectiva de creación de juegos no es muy útil. Con la configuración por defecto, una forma de colisión con un tamaño de 200 píxeles se trataría como si tuviera un tamaño de 200 metros, lo cual está muy fuera del rango recomendado, al menos para un objeto en movimiento.
En general, es necesario escalar la simulación de física para que funcione bien con el tamaño típico de los objetos en un juego. La escala de la simulación de física se puede cambiar en game.project mediante la configuración de escala de física. Establecer este valor, por ejemplo, en 0.02 significaría que 200 píxeles se tratarían como 4 metros. Ten en cuenta que la gravedad (que también se cambia en game.project) debe aumentarse para adaptarse al cambio de escala.
Se recomienda actualizar el motor de física a intervalos regulares para asegurar una simulación estable (en lugar de actualizarlo a intervalos posiblemente irregulares y dependientes de la tasa de fotogramas). Puedes usar una actualización fija para física marcando la configuración Use Fixed Timestep de la sección Physics en el archivo game.project. La frecuencia de actualización se controla mediante la configuración Fixed Update Frequency de la sección Engine en el archivo game.project. Al usar un timestep fijo para física, también se recomienda usar la función de ciclo de vida fixed_update(self, dt) para interactuar con los objetos de colisión de tu juego, por ejemplo al aplicarles fuerzas.