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 - vicot

Pages: [1]
1
Hey. I'm making a 2D based platformer using C++ and SFML. I made a collision map based on a tile map, but my guy sometimes moves through the collision (if I tap a key couple times it would get stuck inside a collision, messing up my other controls because they are based on collision). Any tips how to fix this? It makes me unable to do gravity, because the guy keeps falling into collision.

Here's my code:

for (int i = 0; i < collisionArray.size(); i++)
      {
         if (playerBoundingBox.intersects(collisionArray[i].getGlobalBounds()))
         {
            player.cialo.setFillColor(Color::Red);
            player.canMove = false;
            cout << "collision" << endl;
            break;
         }
         else
         {
            player.cialo.setFillColor(Color::Blue);
            player.canMove = true;
            cout << "not collision" << endl;
         }
      };


This is my collision code, it's based on an array that I generate from my collision tile map.

Vector2f movement(0.0f, 0.0f);
       
        if (Keyboard::isKeyPressed(Keyboard::W))
        {
                if (canMove == true)
                        movement.y -= velocity * deltaTime;
                else
                        body.move(0.0f, 5.0f);
        }
               
        if (Keyboard::isKeyPressed(Keyboard::S))
        {
                if (canMove == true)
                        movement.y += velocity * deltaTime;
                else
                        body.move(0.0f, -5.0f);
        }
               
        if (Keyboard::isKeyPressed(Keyboard::A))
        {
                if (canMove == true)
                        movement.x -= velocity * deltaTime;
                else
                        body.move(5.0f, 0.0f);
        }
               
        if (Keyboard::isKeyPressed(Keyboard::D))
        {
                if (canMove == true)
                        movement.x += velocity * deltaTime;
                else
                        body.move(-5.0f, 0.0f);

        }

This is my movement code.

Pages: [1]