ArcHandles.MouseButton1Up does not work as intended

[EDIT: Seems like this has been an issue for over 3 years, which I did not realise before creating this thread.]

Expected behaviour:
.MouseButton1Up will fire whenever you release the ArcHandles object, no matter where your mouse is at the time.

Actual behaviour:
.MouseButton1Up only fires when the mouse is directly on the ArcHandles object (see below).

This bug occurs in both studio and in-game. It does not affect the similar Handles object, only ArcHandles.

To reproduce:

  • Insert a LocalScript and an ArcHandles object to the StarterGui.
  • Insert a Part into the Workspace and set ArcHandles.Adornee to the part you inserted.
  • Write the following code within the LocalScript:
local handles = script.Parent:WaitForChild("ArcHandles")
handles.MouseButton1Down:Connect(function()
    print("Mouse down!")
end)
handles.MouseButton1Up:Connect(function()
	print("Mouse up!")
end)
  • Notice how the message Mouse up! is only printed when releasing the mouse inside the orb you selected. If you press down on the orb and move your mouse away before releasing, the event will not fire.
2 Likes

If this takes a while to be fixed, you could use UserInputService.InputEnded to detect when the mouse is release.

I use that for almost all my mouse input simply becuase it will always fire as expected in my experience

1 Like

I have been using UIS.InputEnded for a while now, but am trying to make the same tools that are available to PC players available to mobile players as well. I don’t think I can use InputEnded when dealing with mobile as they can tap in multiple places at the same time, and the finger they release may not be the one on the ArcHandles object. Thanks anyway, though :slight_smile:

When you detect TouchEnded, you can check the position of the “input object” to see where their finger was and determine if it was the correct finger

How would you go about checking if the finger was the one using the ArcHandles? I can’t think of a way to do that. You’d need to know the position of the point they were dragging on the ArcHandles, plus be able to compensate for any movement on the Normal to the Axis they are dragging (their finger could be on the opposite side of the phone but still be the one on the ArcHandles object).

You can use TouchStart and touchMoved to detect movement of the fingers.

Also, touchStart creates a “Touch” instance, so on touchEnded, you could compare the two touch instances to see if its the same one

Looks like this has been an issue for 3 years, though I did not see this thread before creating this one. Could we please have a fix for this?

Thanks for the report! We’ve filed this internally and we’ll follow up here when we have an update for you.

1 Like

A fix for this is now in the pipe (won’t be here until the new year thanks to the holidays).

EDIT: Turns out that we could get it in. A fix is live for this now.

3 Likes

This issue should now be resolved! If this issue is still occurring, please create a new topic for us to look into.

2 Likes