Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | Jasshtag |
Hi, guys, I’m new using this engine, and currently I’m trying to make a simple jigsaw game, so for the pieces of the jigsaw, I created a scene meant to be draggable, and works fine in my computer, but when I exported to my phone, I’ve face some several issues.
I implemented the mouse_entered signal to know wich piece can I drag, otherwise when various pieces are overlapping the mouse take em all, but this on a touchscreen isn’t working, cause there’s no way to execute the mouse_entered signal in that way, so when I touch a piece the focus remains in that one, so if I touch a different one the position of the first one keeps changing…
I’m sorry for my broken english, I’m really trying to explain my problem.
This is my code for the piece node:
extends Node2D
var selected : bool = false
var selectable: bool = true
var mouse_over: bool = false
onready var sprite = $face
onready var area = $Area
onready var col = $Area/CollisionShape2D
onready var ani = $AnimationPlayer
var sprtX
var sprtY
var row : int
var column : int
var coord
signal _selected(Piece)
signal dropped
signal test
func _ready():
sprtX = sprite.texture.get_size().x
sprtY = sprite.texture.get_size().y
col.shape.extents = Vector2(sprtX*.35,sprtY*.35)
area.connect("mouse_entered",self,"_mouse_over", [true])
area.connect("mouse_exited",self,"_mouse_over", [false])
set_process_unhandled_input(true)
func setCoordenates(r, c) -> void:
row = r
column = c
func getCoordenates() -> Vector2: return Vector2(row,column)
func getTextureSize() -> Vector2:
return Vector2(sprtX,sprtY)
func _unhandled_input(event):
if event is InputEventMouseButton and mouse_over:
if event.button_index == BUTTON_LEFT and event.pressed:
get_tree().set_input_as_handled()
selected = true
emit_signal("_selected", self)
else:
if event.button_index == BUTTON_LEFT and not event.pressed:
selected = false
var shortest_dist = 45
var distance = global_position.distance_to(coord.global_position)
emit_signal("test")
if distance < shortest_dist:
if getCoordenates() == coord.getCoords():
if selectable:
ani.play("selected")
yield(ani,"animation_finished")
selectable = false
global_position = coord.global_position
emit_signal("dropped")
func _physics_process(delta):
followMouse(delta)
func followMouse(delta):
if selected and selectable:
global_position = get_global_mouse_position()
func _mouse_over(over):
self.mouse_over = over