Как сделать новую созданную строку определенной длины?

Мне нужно, чтобы линия, которую я рисую, имела определенную длину. Я могу определить, когда он достигает требуемой длины, но если пользователь перемещает мышь быстрее, линия может стать длиннее, чем предполагалось.

Вот видео о проблеме, с которой я столкнулся, когда я медленно перемещаю мышь, работает отлично, но скорость дает проблемы: https://www.youtube.com/watch?v=4wkYcbG78TE

Вот код, в котором я создаю и определяю длину строки.

if Input.is_action_pressed("Left_click"): #This checks the distance between last vector and the mouse vector
        #points_array[-1] = get_global_mouse_position() # Gets the last position of the array and sets the mouse cords
        var length = clamp(points_array[-1].distance_to(get_global_mouse_position()),0,20)
        if length == 20: # if its long enough create a new line and set it to mouse position
            var cords = get_global_mouse_position()
            print(cords)
            points_array.append(cords)

person Dragon20C    schedule 22.04.2021    source источник


Ответы (1)


Когда мышь перемещалась слишком много, вы могли добавить несколько точек, чтобы заполнить пробел, конечно, всегда на правильном расстоянии.

То есть, хотя длина от последней точки до положения курсора мыши больше, чем желаемое расстояние, добавьте еще одну точку на соответствующем расстоянии.

Таким образом, цикл while:

if Input.is_action_pressed("Left_click"):
    var mouse_pos = get_global_mouse_position()
    var distance = 20
    while points_array[-1].distance_to(mouse_pos) > distance:
        var cords = # ???
        points_array.append(cords)

Небольшая векторная алгебра выяснит, где разместить эту точку. Начиная с последней добавленной точки, вы хотите перейти в направлении от нее до положения курсора мыши. На какое расстояние идти? ну, это желаемая длина.

if Input.is_action_pressed("Left_click"):
    var mouse_pos = get_global_mouse_position()
    var distance = 20
    while points_array[-1].distance_to(mouse_pos) > distance:
        var last_point = points_array[-1]
        var cords = last_point + last_point.direction_to(mouse_pos) * distance
        points_array.append(cords)

Я считаю, что это должно сработать.

person Theraot    schedule 22.04.2021
comment
привет Тераот, еще раз спасибо за вашу потрясающую работу, на этот раз я действительно немного ее понимаю, ха-ха, еще раз спасибо! - person Dragon20C; 23.04.2021