Почему _integrate_forces не работает, если RigidBody2D имеет шкалу гравитации, установленную на 0?

Я пытаюсь перетащить RigidBody2D, однако я заметил, что мой код вообще не работает, если я устанавливаю Gravity Scale = 0, и если я устанавливаю Gravity Scale на 0,5, он работает, однако, если я перетащу его и перестану двигаться мышь на секунду, она застревает на своем месте, как будто я установил шкалу гравитации на 0.

extends RigidBody2D

var is_held = false
func _ready():
    set_process_input(true)

func _integrate_forces(state):
    i = i + 1
    var lv = state.get_linear_velocity()

    if is_held:
        lv = (get_viewport().get_mouse_pos() - get_pos()) * 16

    state.set_linear_velocity(lv)

func _input(event):
    if event.type == InputEvent.MOUSE_BUTTON and not event.pressed and event.button_index == BUTTON_LEFT:
        is_held = false

func _on_food_input_event( viewport, event, shape_idx ):
    if event.type == InputEvent.MOUSE_BUTTON and event.pressed and event.button_index == BUTTON_LEFT:
        is_held = true

В конце концов, я пытаюсь иметь возможность перетаскивать твердое тело по вертикали или по горизонтали, а не по диагонали и по вертикали.


person Waqleh    schedule 18.07.2017    source источник


Ответы (1)


Вы должны зайти в свой визуальный редактор в свойства RigidBody2D и установить для первого свойства значение «Mode:Character». Ваша функция "_integrate_forces" не вызывается все время в "Mode:Rigid". Когда он останавливается, двигатель перестает вызывать его. Но он все время вызывается в "Mode:Character". Это решит вашу проблему.

person Borislav Markov    schedule 25.08.2017