Детектор движения Godot TouchScreen

Я делаю простую мобильную игру для Android в Godot3.1. Мне нужно было бы сделать детектор смахивания, который определял бы, смахнул ли игрок и в каком направлении (влево или вправо).

Я пробовал это:

var swipe_start = null
var minimum_drag = 100

func _unhandled_input(event):
if event.is_action_pressed("click"):
    swipe_start = event.get_position()
if event.is_action_released("click"):
    _calculate_swipe(event.get_position())

func _calculate_swipe(swipe_end):
  if swipe_start == null: 
    return
  var swipe = swipe_end - swipe_start
  if abs(swipe.x) > minimum_drag:
    if swipe.x > 0:
        _right()
    else:
        _left()

Это работает, когда вы щелкаете мышью и проводите пальцем, но не работает, когда вы играете в нее на своем телефоне Android.

Любые идеи?


person btm2424    schedule 11.01.2020    source источник


Ответы (1)


Этот код учитывает только клики, но не касания экрана, чтобы исправить это, у вас есть два варианта:

  • Перейдите в Проект> Настройки проекта> Устройства ввода> Направление и включите параметр Эмулировать мышь от касания.

  • Или используйте следующий код:

func _unhandled_input(event):
  if event is InputEventScreenTouch:
    if event.pressed:
      swipe_start = event.get_position()
    else:
      _calculate_swipe(event.get_position())

вместо того:

func _unhandled_input(event):
  if event.is_action_pressed("click"):
    swipe_start = event.get_position()
  if event.is_action_released("click"):
    _calculate_swipe(event.get_position())

В последнем решении код учитывает только прикосновения к экрану, поэтому вы не сможете протестировать его на ПК, если не перейдете в Проект> Настройки проекта> Устройства ввода> Указание и не включите Эмуляция касания. С помощью мыши

person Federico Ciuffardi    schedule 11.01.2020