0
\$\begingroup\$

I am trying to make a sling-shot that fires a projectile. I want it to act like the standard sling-shot in angry birds.

So far I managed to get the "pulling" effect, ie. If I draw backwards it fires in the opposite angle of the direction my finger went, and with different speeds depending on how far I dragged the finger from the "start-position".

Touch Code/logic:

@Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { touchPos.set(screenX, screenY, 0); camera.unproject(touchPos); Vector2 temp = new Vector2(touchPos.x, touchPos.y); Vector2 d = temp.sub(startPos); //subtract finger-position from start-position float velX = d.x * FIRE_SPEED; //add speed float velY = d.y * FIRE_SPEED; d.set(velX, velY); // set the velocity projectile.setVelocity(d); //send velocity to object projectile.setFired(true); //signal the object that its been fired return false; } 

Object Code:

public void update(float delta){ if(fired){ pos.x -= velocity.x * delta; //since I want it to move the opposite direction of where I dragged, I subtract pos.y -= velocity.y * delta; } } 

How would I go about adding gravity here? I want it to shoot in the set direction, then after a certain time/distance I want it to start falling (taking into account the direction so that it looks like real gravity), exactly as in angry birds.

\$\endgroup\$

2 Answers 2

1
\$\begingroup\$

You add the gravitational acceleration to the vertical component of velocity.

 if(fired){ pos.x -= velocity.x * delta; //since I want it to move the opposite direction of where I dragged, I subtract pos.y -= velocity.y * delta; velocity.y += g*delta; } 
\$\endgroup\$
1
\$\begingroup\$

Gravity is a constant downward acceleration. Acceleration is a change in velocity.

Simply subtract a constant value from velocity.y every update.

public void update(float delta){ if(fired){ velocity.y -= GRAVITY * delta; pos.x -= velocity.x * delta; pos.y -= velocity.y * delta; } } 

The ideal value for GRAVITY depends on the scale of your game and is something you need to find out through experimentation.

\$\endgroup\$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.