# Is there any way to make a kinematic body 2D bounce on wall using move_and_slide?

Attention Topic was automatically imported from the old Question2Answer platform.

I’m trying to make kind of a smash bros like fighting game but simplier and everything it’s working the way that I imagine, except the knockback hit.
I want that when the character knockback with high speed, he bounces on wall.
I’m using a Kinematic Body 2D with the move_and_slide.
I’ve tried to get the collision and multiply the velocity by the collision normal but it just don’t make anything.

``````if velocity.length() > 500:
if get_slide_count() > 0:
velocity = velocity * get_slide_collision(0).normal
``````

I’ve also tried to use the .bounce() but also dont work

``````if velocity.length() > 500:
if get_slide_count() > 0:
velocity = velocity.bounce(get_slide_collision(0).normal)
``````

When I use a print to check, everything is working, it gets the collision and the normal, it multiplies, it just dont make anything.
I completely sure that I’m making something wrong.

Here’s a Preview (the character is the blue one):

Edit: Someone on Reddit have helped me.
It happens that the velocity that I was getting, it’was when the character stop, so i just needed to make a variable with the previous velocity:

``````var prev_velocity = velocity

velocity = move_and_slide(velocity, UP)
if prev_velocity.length() > 500:
if get_slide_count() > 0:
velocity = prev_velocity.bounce(get_slide_collision(0).normal) * 0.8
``````

Uh, there is no visible preview on your question.

Millard | 2020-09-17 04:23

Hi,
are you sure the get_slide_collision(0) is the wall? … and not the ground?

klaas | 2020-09-17 10:59

Sorry, don’t know why the image isn’t working but i have edited with the direct link.

Eduuuuu | 2020-09-17 11:53

Yeah, but I want to bounce in any direction so it’s not gonna be a problem if the character bounces on the ground too. I just kinda confused with the math and what method should i use.

Eduuuuu | 2020-09-17 12:02

and are you sure that velocity is > 500?

i would

``````if velocity.length() > 500:
if get_slide_count() > 0:
breakpoint
var collision = get_slide_collision(0)
velocity = velocity.bounce(collision.normal)
``````

and step into it … looking at the values of collision and the velocity result in the debugger

klaas | 2020-09-17 12:08