GaryS

Calculate velocity

Recommended Posts

Please excuse what I'm sure is a very novice question, but I've been all over Google and I can't find what I'm looking for.

I'm attempting to detect when a sprite is no longer being moved by the player - e.g. when the player releases the key. I'd like to do this by seeing how the sprite is moving, rather than relying on detecting the keypress or other input, as the sprite has some drag associated with it and I'd like to play a 'slowdown' animation as the drag slows the sprite.
I'm also attempting to keep as much encapsulated in my prefab as possible and thus I don't want to put anything in the main game's update method to initiate the slowdown function.

So, what I'd like to do is detect that the sprite is no longer moving at the veliocity I'd expect it to if the move functions were being called...
The thought being that the velocity is constant while the key is down, and begins to reduce when the key is released - however because the sprite can be at any angle, I can't predict what the velocity will be without understanding how it's calcuated.

So, unless someone has another suggestion as to how I might detect that the sprite is slowing down, in any direction - would someone be able to give me some schooling in what I assume is very basic trigonometry?

Thanks!

Share this post


Link to post
Share on other sites

First set your "limit" speed. When object velocity falls below you are sure object is slowing.

Object's final velocity is composed from its x velocity and y velocity. Ratio and sign of these two gives direction and size in 2D space - velocity vector (velX, velY).

To calculate vector size you have to do square root of velX * velX + velY * velY:    lenght =sqrt(velX * velX + velY * velY) ... in fact, it is Pythagorean theorem.

If length is below your limit speed, then object slowed down below it. (length < limit)

As calculating sqrt for every check is wasting of CPU you can power your limit speed by 2 and compare if:   length_squared < limit_powerded_by_2 ... velX * velX + velY * velY < limit_powered_by_2

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.