Drag and drop 2d objects on touchscreen

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By myrleft
:warning: Old Version Published before Godot 3 was released.

I would like to drag and drop multiple sprites on touchscreen mobile.

I successfully did it for desktop (mouse).

I created an Area2d->CollisionShape for each sprite and used the callbacks on_enter and InputEvent.MOUSE_BUTTON event.

How can i implement this on Android (touchscreen) ?

Im sorry i know this is old and I don’t have a answer for you but can you please show how you got drag&drop to work with mouse? Like show the script.

SandmanIvan | 2016-05-30 05:53

No problem.
Here is my code:


extends Sprite

var pressed = false
var mouse_enter = false
var object_dragged = false
var pos = get_global_mouse_pos()

func _ready():
	set_fixed_process(true)

func _fixed_process(delta):
	pos = get_global_mouse_pos()
	if mouse_enter == true:
		if Input.is_mouse_button_pressed(BUTTON_LEFT):
			set_global_pos(pos)
			object_dragged = true
		else:
			object_dragged = false

func _on_Area2D_mouse_enter():
    mouse_enter = true
    print("enter")

func _on_Area2D_mouse_exit():
	if object_dragged == false:
		mouse_enter = false

myrleft | 2016-06-12 19:01

:bust_in_silhouette: Reply From: Hasan Hejdari Nasab

I’m using an input_event function:

func _on_Pistolo_input_event( viewport, event, shape_idx ):
	if event.type == InputEvent.SCREEN_TOUCH:
		if event.pressed:
			get_tree().get_root().get_node("Radiko").kaptitajxo = self
		else:
			get_tree().get_root().get_node("Radiko").kaptitajxo = null
	elif event.type == InputEvent.MOUSE_BUTTON:
		if event.button_mask == 0:
			get_tree().get_root().get_node("Radiko").kaptitajxo = self
		else:
			get_tree().get_root().get_node("Radiko").kaptitajxo = null

I keep current picked up instance in a variable like kaptitajxo at root node.
Finally you need something like this in order to updating position of picked up instance to mouse position:

if get_tree().get_root().get_node("Radiko").kaptitajxo != null:
		get_tree().get_root().get_node("Radiko").kaptitajxo.set_global_pos(get_global_mouse_pos())