Please I need your help to figure this out.
I have this formula that I have been trying to apply to my project.
I use the GoDot engine to create a 2D platformer game with projectiles.
-
- static public Vector2 calculate_arc_velocity(Vector2 point_a, Vector2 point_b, float arc_height,float up_gravity=30, float? down_gravity=null)
- {
- if(down_gravity==null)
- down_gravity=up_gravity;
- Vector2 velocity = new Vector2();
- Vector2 displacement = point_b-point_a;
- //GD.Print(displacement);
- if(displacement.y>arc_height)
- {
- var time_up = Mathf.Sqrt(-2F*(float)arc_height/(float)up_gravity);
- var time_down = Mathf.Sqrt(2F*((float)displacement.y-(float)arc_height)/(float)down_gravity);
- velocity.y = -Mathf.Sqrt(-2F*(float)up_gravity*(float)arc_height);
- velocity.x = (float)displacement.x/(float)time_up+(float)time_down;
- }
- return velocity;
- }
-
-
- }
-
- public void launch(Node2D start, Node2D target, float direction)
- {
- Vector2 startpos = start.GlobalPosition;
- targetpos = target.GlobalPosition;
- float up_gravity= (target.GlobalPosition.y-start.GlobalPosition.y)/2;
- float arc_heigh = (target.GlobalPosition.y-start.GlobalPosition.y)-50;
-
- //velocity = throw_velocity*new Vector2(direction,1);
- //Vector2 arc_height = target.GlobalPosition-start.GlobalPosition;
- velocity = PhysicsHelper.calculate_arc_velocity(startpos,targetpos,arc_heigh,-arc_heigh);
- //velocity =throw_velocity+velocity;
- GD.Print(arc_heigh);
- GD.Print(up_gravity);
- velocity/=2;
- }
The calculate_arc_velocity should do the job I think but the 'launch' method is just really messy.
My up_gravity and arc_heigh is just a desperate attempt to make it work. I started to mess with that because I couldn't make it work when I started to move the mouse up.
I greatly appreciate your help with this.
Replies
you want to move the projectile from point a to point b
Do you need to calculate the velocity and arc that it follows or do you already have some of tha information?