Entonces, quiero establecer una velocidad en píxeles por segundo y luego calcular cuánto mover ese marco de física específico. algo así como const speed = 500 / get_physics_fps(), de hecho podría hacer:

func _physics_process(delta):
    var speed = 500 * delta

Pero se siente como un desperdicio calcular cada cuadro que sabemos que no va a cambiar, también puedo dividirlo por 60 o lo que sea que establezca mis fps físicos, pero sería más difícil de mantener de lo que necesita ser - estar.

0
Juan 8 dic. 2019 a las 07:29

2 respuestas

La mejor respuesta

Puede recuperar el FPS de física de ProjectSettings:

var fps = ProjectSettings.get_setting("physics/common/physics_fps")

Sin embargo, es extremadamente común calcular la traducción multiplicando speed por delta en _physics_process. Elegir alguna alternativa inusual solo hará que su proyecto sea más confuso, y solo vale la pena si ya ha identificado un cuello de botella en el rendimiento directamente relacionado con esto. Si no lo ha hecho, está cayendo en la trampa de optimización prematura, perdiendo tiempo y espacio de cabeza optimizando cosas que no no importa, lo que significa que no tendrá tiempo para optimizar las cosas que hace importan más tarde.

0
rcorre 8 dic. 2019 a las 13:32

La propiedad que está buscando es Engine.iterations_per_second, que se puede leer y escribir en tiempo de ejecución:

var speed = 500.0 / Engine.iterations_per_second

Alternativamente, puede leer cualquiera de las configuraciones de su proyecto a través de ProjectSettings.get_setting(), sin embargo, tenga en cuenta que modificar las configuraciones de su proyecto en tiempo de ejecución no hará nada, y leerlas en tiempo de ejecución no reflejará ningún cambio que pueda haber ocurrido desde el el motor se inicializó, por lo que desaconsejaría a menos que sea absolutamente necesario.

Dicho esto, te recomiendo encarecidamente que sigas con el método delta, en parte porque intentar codificar tu velocidad es una optimización prematura tremendamente superflua, en parte porque es una práctica estándar y en parte porque multiplicar por delta te permite usar Engine.time_scale para implementar cosas como la cámara lenta sin tener que saltar a través del código de caso especial de pesadilla.

1
VPellen 8 dic. 2019 a las 14:17