I have just realised that Apply Force does not applies a force for a length of the frame, but that it applies an impulse at the start of the frame. Which means that the simulation would behave differently depending on the FPS (and thus performance) of the player : at 20 fps an object would be pushed 3 times left than at 60 fps.
(Also it is a bit weird : if frame lenght is not taken into account, I don’t really understand the difference bewteen Apply Force and Apply Impulse…)
In a game with a rocket I made, players with a low FPS count could not lift-off, while the others had no issue. I solved that issue by multiplying the force by “TimeDelta()*60”.
- Either specify in the documentation that the force is an impulse applied at the start of the frame. And thus that the effect would depend on framerate.
- Or automatically apply that force for the duration of the frame (multiply it by TimeDelta()*60)
According to Box2D (the library used by the behavior) documentation, impulses are changing the speed immediately which means that forces are doing it over time.
It’s true that the action description should make this clear.
I didn’t know they worked this way but I was needing to know some expression that would make the actions independent of the framerate. Just like you, some projectiles may not collide with enemies due to frame drops. I had been using permanent force applied to each projectile (no physics).
How does it work when using tweens? is it also based on frame rate?
Does it consume more resources to use actions through tweens than to use through TimeDelta()? Tweens can be executed once, while actions with TimeDelta() are executed every frame, but I don’t know how tweens actions really work, so I don’t know of all the possible ways (applied forces, actions through TimeDelta() and tweens) consume less resources.