SFML community forums

Help => Graphics => Topic started by: coldkillerlips on February 06, 2012, 06:21:21 pm

Title: Converting Coords and moving with mouse issue [SOLVED]
Post by: coldkillerlips on February 06, 2012, 06:21:21 pm
Ok so i'm totally stumped. I'm trying to move the character using the mouse on a right click. When i move right click it'll sometimes go to the correct position and stop, other times it'll go non-stop or stop at a weird offset. Can anyone tell me what i'm doing wrong?

Code: [Select]

void DynamicEntity::MoveEvent(sf::RenderWindow &Window, sf::View View)
{
if(sf::Mouse::IsButtonPressed(sf::Mouse::Right))
{
sf::Vector2f MousePos(Window.ConvertCoords(sf::Mouse::GetPosition(Window).x, sf::Mouse::GetPosition(Window).y, View));

this->Dest.x = (MousePos.x - this->GetSprite().GetPosition().x);
this->Dest.y = (MousePos.y - this->GetSprite().GetPosition().y);

this->NewLoc = normalize(Dest);

this->SetIsMoving(true);
}
}

void DynamicEntity::Move()
{
if(this->GetIsMoving() == true)
{
if(this->GetSprite().GetPosition().x <= (Dest.x - 5.f) || this->GetSprite().GetPosition().x >= (Dest.x + 5.f))
{
this->MoveSprite(NewLoc.x * movSpeed, 0);
}

if(this->GetSprite().GetPosition().y <= (Dest.y - 5.f) || this->GetSprite().GetPosition().y >= (Dest.y + 5.f))
{
this->MoveSprite(0, NewLoc.y * movSpeed);
}
}
else
{
SetDest(this->GetSprite().GetPosition());
this->NewLoc = this->GetSprite().GetPosition();
this->SetIsMoving(false);
}
}
Title: Converting Coords and moving with mouse issue [SOLVED]
Post by: RedIrony on February 06, 2012, 07:28:37 pm
Why do you have
Code: [Select]
this->Dest.x = (MousePos.x - this->GetSprite().GetPosition().x);
this->Dest.y = (MousePos.y - this->GetSprite().GetPosition().y);
?

It looks like you're creating a distance vector relative to the position of the sprite, but in your move function you're treating it like it was relative to the origin.
Title: Converting Coords and moving with mouse issue [SOLVED]
Post by: coldkillerlips on February 06, 2012, 07:39:26 pm
Quote from: "RedIrony"
Why do you have
Code: [Select]
this->Dest.x = (MousePos.x - this->GetSprite().GetPosition().x);
this->Dest.y = (MousePos.y - this->GetSprite().GetPosition().y);
?

It looks like you're creating a distance vector relative to the position of the sprite, but in your move function you're treating it like it was relative to the origin.


Thank you very much. That was the issue.
Title: Converting Coords and moving with mouse issue [SOLVED]
Post by: Nexus on February 06, 2012, 07:50:25 pm
By the way, why not
Code: [Select]
Dest = MousePos - GetSprite().GetPosition();instead of
Code: [Select]
this->Dest.x = (MousePos.x - this->GetSprite().GetPosition().x);
this->Dest.y = (MousePos.y - this->GetSprite().GetPosition().y);
Title: Converting Coords and moving with mouse issue [SOLVED]
Post by: coldkillerlips on February 07, 2012, 06:41:15 am
I'm not sure why I chose to do it separately. I didn't think it mattered aside from being shorter though.