user2005938
user2005938

Reputation: 179

Moving an object towards a point android

I have this in the initialization of a bullet object:

    x = startX;
    y = startY;
    double distance = Math.sqrt(((endX - x) ^ 2) + ((endY - y) ^ 2));
    speedX = (6 * (endX - x)) / distance;
    speedY = (6 * (endY - y)) / distance;

It goes to where I touch on the screen, but the further away I touch, the faster it goes. This works fine on paper, I've tried it with different lengths and it should work, but bullets need to move 6 pixels on the line from the player to the point touched every step. And its update method moves of course. But why do bullets move at different speeds?

Upvotes: 1

Views: 1279

Answers (2)

Code-Apprentice
Code-Apprentice

Reputation: 83537

Assuming that all measurements are in pixels and you want the speed to be 6 pixels per step, then you can calculate the velocity by using a little bit of trig:

double theta = Math.atan2(endY - startY, endX - startX);
velX = 6 * Math.cos(theta);
velY = 6 * Math.sin(theta);

Note that I am using the terms "speed" and "velocity" as a physicist would; speed is a scalar value and velocity is a vector with magnitude and direction.

Upvotes: 0

Patashu
Patashu

Reputation: 21773

If I remember my Java operators...

Replace

double distance = Math.sqrt(((endX - x) ^ 2) + ((endY - y) ^ 2));

with

double distance = Math.sqrt(Math.pow(endX - x, 2) + Math.pow(endY - y, 2));

Upvotes: 3

Related Questions