I'm working on a Pac-Man game using C++ and SFML, and I'm implementing a smooth collision slide for the player (represented by a circle). The idea is to allow smooth movement in both the X and Y axes, including diagonal movements. I've set up an array for wall collisions and separated the collision detection handling for the X and Y axes. It's working fine when the player collides with walls to the sides or when moving up and down. However, I encounter a problem when the player collides with a wall from the top or bottom while moving diagonally. The player stops moving entirely in these cases. Could someone help me understand what might be causing this issue in my code?
2 Answers
I tried visualizing the issue since it can be tricky to debug. Here’s a link to my diagram: [https://www.dagflo.com/p/4c117fea-5a6d-41b7-88b2-2edf85702950](https://www.dagflo.com/p/4c117fea-5a6d-41b7-88b2-2edf85702950). Sometimes, just seeing it laid out can help clarify where things might be going wrong. Let me know what you think!
It looks like the problem might stem from how you're handling the player’s position resets during collision checks. After checking for collisions on the X-axis, you're updating the X position and then resetting it again before checking the Y-axis. This could lead to situations where the player is pushed back into a wall when they should be moving smoothly. Try reworking the order to ensure the player's position reflects their actual movement before each collision check.
I ran into a similar issue once. I had to refactor my logic to ensure the checks didn't interfere with one another. Maybe explore ensuring that you only adjust the position once per frame after all collisions are evaluated.

Thanks for the visualization! It's really helping me understand how the code is interacting. By the way, do you have any tips on improving my debugging skills? I’m still figuring out how to dissect the code behavior effectively.