SFML community forums
Help => Graphics => Topic started by: ravenheart on October 12, 2008, 11:25:16 am
-
why does this not work:
i have a movement vector telling the direction, and a speed ;
sprite should move direction mousecursor,
but in order to keep my pace i have to normalize the vector, am i right?
sf::Vector2f GetDir(sf::Vector2f x)
{
sf::Vector2f Sprite_Mouse = GetMousePos() - x;
float temp =(float) sqrt((Sprite_Mouse.x * Sprite_Mouse.x + Sprite_Mouse.y * Sprite_Mouse.y));
Sprite_Mouse = Sprite_Mouse / temp;
return Sprite_Mouse;
}
vector Sprite_mouse should be the vector pointing from
x = Sprite_Position to
GetMousePos = into view-coords converted MousePosition
to normalize i have to calculate the lenght of my vector
this should be sqrt( x^2 + y^2)
when i divide my original vector by this above ( i called it temp)
my vector should have lenght 1;
but trying it my Sprite moves VERY slow;
thx for coming answers
-
in order to keep my pace i have to normalize the vector, am i right?
Correct.
when i divide my original vector by this above ( i called it temp)
my vector should have lenght 1;
Correct.
but trying it my Sprite moves VERY slow;
It's because your movement vector is only one unit in length. :wink:
Try placing: Sprite_Mouse = Sprite_Mouse * 5; before returning Sprite_Mouse, and it should move 5 times faster
-
hi there,
I was wondering, how should I multiply that vector so that I can use it to control de direction?
can I do something like this:
m_Bullets[i].Direction.x = m_Bullets[i].Speed * Sprite_Mouse.x ;
m_Bullets[i].Direction.y = m_Bullets[i].Speed * Sprite_Mouse.y ;
The fact is that my angle is reduced from 30.0f to -30.0f (ergo, 330.0f, but counting backwards to zero and then from 360.0f to 330.0f) but doing that makes my bullets go always in the same X direction...
I tried doing something like:
m_Bullets[i].Direction.x = ( (angle>180.f || angle<0.0f) ?m_Bullets[i].Speed : -m_Bullets[i].Speed ) * Sprite_Mouse.x ;
But it just doesnt work =/...meaning, angle is a var that actually works great that goes from 30.0f to 330.0f backwards.
Any ideas?
-
Your code should have worked the first time, assuming all the types are correct, but anyways, this is how I would've done it; try it and see if it works:
sf::Vector2f GetDir(sf::Vector2f x)
{
sf::Vector2f Sprite_Mouse = GetMousePos() - x;
Sprite_Mouse = Sprite_Mouse / sqrt(Sprite_Mouse.x * Sprite_Mouse.x + Sprite_Mouse.y * Sprite_Mouse.y) * SPEED;
return Sprite_Mouse;
}