Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Watcharakiete

Pages: [1]
1
General / Problemm with the move function
« on: October 20, 2017, 07:15:51 pm »
Hi everyone I'me new with SFML and have a ploblem with the function called move()  :-\

I've set the class and function in it is

void Collider::Move(float dx, float dy)
{
        body.move(dx, dy);
}

in this class (Collider), it has boolean called CheckCollision

bool Collider::CheckCollision(Collider & other,float push)
{
        sf::Vector2f otherPosition = other.GetPosition();
        sf::Vector2f otherHalfsize = other.GetHalfsize();
        sf::Vector2f thisPosition = GetPosition();
        sf::Vector2f thisHalfsize = GetHalfsize();

        float DeltaX = otherPosition.x - thisPosition.x;
        float DeltaY = otherPosition.y - thisPosition.y;

        float intersectX = (abs(DeltaX)) - (otherHalfsize.x+ thisHalfsize.x);
        float intersectY = (abs(DeltaY)) - (otherHalfsize.y + thisHalfsize.y);

       
       
        Move(50.0f, 0.0f);
       
       
        if (intersectX < 0.0f && intersectY < 0.0f)
        {
                push = std::min(std::max(push, 0.0f), 1.0f);
               
                if (intersectX > intersectY)
                {      
                       
                        if (DeltaX > 0.0f)
                        {
                        a = 1;
                                Move(intersectX*(1.0f - push), 0.0f);
                                other.Move(-intersectX*push, 0.0f);
                        }

                        else
                        {
                                a = 2;
                                Move(-intersectX*(1.0f - push), 0.0f);
                                other.Move(intersectX*push, 0.0f);
                       
                        }
                }
                else
                {
                       
                        if (DeltaY > 0.0f)
                        {
                                a = 3;
                                Move(0.0f,intersectY*(1.0f - push));
                                other.Move(0.0f,-intersectY*push );
                        }

                        else
                        {
                                a = 4;
                                Move(0.0f,-intersectY*(1.0f - push));
                                other.Move(0.0f,intersectY*push);

                        }
               
                }
                return true;
        }




        return false;
}
 

And then in the main.cpp I called the 2 rectangleShapes to check if they collided with each other.
by using

box1.GetCollider().CheckCollision(player.GetCollider(),0.2f);

In the code you'll see that I try to call move  to the body which I've checked that a has changed from 1-4 (which means it works but not move anyof the rectangleShape)

Im still confusing this and can not solve. please help me.

Pages: [1]