W
W
wolf-98302015-02-22 16:52:30
Mathematics
wolf-9830, 2015-02-22 16:52:30

How can I make the point move in a straight line?

According to the plan in my game, the player must press on the screen and the character must move there.
The origin is the lower left corner with coordinates (0:0), and the upper right corner with coordinates (1000:1000). So how do you make the point with coordinates (x1:x2) move to coordinates (x2:x2) in a straight line?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
R
Ruslan Luxurious, 2015-02-22
@wolf-9830

// 1 текущая позиция
position_x = 1;
position_y = 2;

// 2 место назначения
destination_x = 2;
destination_y = 2;

// 3 вектор направления
direction_x = destination_x - position_x;
direction_y = destination_y - position_y;

// 4 длина вектора направления
direction_length = sqrt(direction_x * direction_x + direction_y * direction_y)

// 5 нормализованный вектор направления, что бы можно было умножать на скорость
if (direction_length == 0) {
    normalized_direction_x = 0;
    normalized_direction_y = 0;
} else {
    normalized_direction_x = dirextion_x / direction_length;
    normalized_direction_y = direction_y / direction_length;
}

// 6 скорость, например за шаг или секунду
speed = 0.5 

// 7 вектор скорости
velocity_x = normalized_direction_x * speed;
velocity_y = normalized_direction_y * speed;

// 8 следующая точка на которую можно переместиться 
// в принципе, уже ответ на вопрос, но! дальше - лучше
next_position_x += velocity_x
next_position_y += velocity_y

// 9 расстояние от текущей точки до места назначения
to_destination_distance = sqrt((position_x - destination_x)^2 + (position_y - destination_y)^2)

// 10 расстояние от текущей точки до следующей точки
to_next_position_distance = sqrt((position_x - next_position_x)^2 + (position_y - next_position_y)^2)

// 11 сравниваем, если до места назначения ближе чем до следующего шага:
// ==с========n==
// ==c=====d=====
// то двигать только до места назначения, не дальше
if (to_destination_distance <= to_next_position_distance) {
    position_x = destination_x
    position_y = destination_y
} else {
    position_x = next_position_x
    position_y = next_position_y
}

// пункты 2-11 повторять до тех пор пока не приедем в место назначения

M
mamkaololosha, 2015-02-22
@mamkaololosha

dir = (pos2 - pos1).norm vel
= dir * vel_scalar
p = p0 + vel*dt

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question