+ 5
Glitchy Collision
I am making a platformer, once the player hits the left/right edge of the platform speed should be set to 0. This prevents the player from going beyond the boundary and stops the scrolling effect. Although the player passes straight through and falls through the screen. And the bottom collision is playing up too. How can I fix this? (Move the player to the blue barrier to see the effect) https://code.sololearn.com/W8WAYyI3DRmP/?ref=app
12 Answers
+ 3
I am adding a copy of the working setting here:
https://code.sololearn.com/WahgRZN1BxTc/?ref=app
+ 3
Gordon Is this right? I think I've done it right but it still shakes
+ 3
no
what you have done is taking the handler out at line 219,
you should look at line 243 instead. in your collision testing, you only check rightward collision and assume non-rightward is left.
But non-rightward can be non-leftward too.
you should add a second calculation, comparing the left boundary of player and right boundary of platform,
and determine whether there is leftward based on the above result.
+ 3
comparing middle points x distance and y distance with sum of half width and sum of half height respectively. so the collision testing is correct.
so the problem is with the handler.
â ... đJavaScripterâď¸... â , in the current state of your code, when you are on the platform and walk left, you can pass through the pillar now. Coder is more knowledgeable, i am sure he can help you from here.
+ 2
1. Quick Answer :
At line 61, change from 0.8 to
this.gravity = 0.3;
2. Full explanation :
2.1 Your logic is correct
2.2 just the player is too quick and
2.3 at a frame, the whole player has not touched the platform (whole square above and not touching)
2.4 and then the next frame, it jumps pass the platform (whole square below and not touching)
2.5 that's why your collision testing fails.
+ 2
i see that you made an edit and added an else at line 240, now the logic is totally wrong.
Because if right is wrong, it always assume there is a leftward collision; and top/bottom is not an else case for left/right collision, vertical and horizontal collisions are independent to each other.
+ 2
part 4,
i just check your code
it is working now
but not totally correct
the shaking when it lands, is because you only check right collision and assume "not right must left ",
you should instead check the left collision explicitly.
+ 2
Gordon How do I check the left side? Sorry asking so many questions. I was given this by another programmer so I don't know how it works yet
+ 2
He says he will debug tommorow. I don't want to disturb his studying. #chemistry
+ 2
Gordon I made a copy of the function so I can modify and understand it. It kinda works apart from left and right
https://code.sololearn.com/W8WAYyI3DRmP/?ref=app
+ 2
â ... đJavaScripterâď¸... â
It seems that your last answer is telling me your finding instead of asking about fixing of left/right.
If so, Thank you for telling me about your finding.
And I am sorry that I gave a wrong answer before. Coder's vector approach works. His collision testing is based on comparing distance between centers and sum of half widths/heights.
If you like to know more about the logic of his collision test, please let me know, so I can prepare an explanation