touch and drag actor
So, I've been working on trying to put something together where I press and hold an actor and drag it along the screen, when I let it go I want it to slide back to its original position.
I have the basics down, when actor is pressed constrain x and y position to the mouse position
when touch is released I interpolate the actor back to its original position.
This all works fine and dandy, but I don't like the way the constrain X and Y attribute looks when Im dragging the actor around, its too precise and doesn't have a good ascetic appeal. I would like for it to have a tiny bit of a lag (just like when you are moving app icons around on the iPhone home screen).
Ive tried "move to" but it causes some issues with the actor interpolate back to original position.
Anyone have a good method from dragging an actor?
Comments
When touch is pressed use a timer. Every 0.2 constrain attribute x and y to mouse
Try something like this.
Mental Donkey Games
Website - Facebook - Twitter
@NipaDidIt, nice and smooth... nice.
http://jamie-cross.net/posts/ ✮ Udemy: Introduction to Mobile Games Development ✮ Learn Mobile Game Development in One Day Using Gamesalad ✮ My Patreon Page
There are numerous ways to do this, here's another one . . . .
When touch is pressed
--Constrain self rotation to: vectorToAngle(Mouse X-self X, Mouse Y-self Y)
--Move: Dir 0°: Relative - Actor: Speed: magnitude(Mouse X-self X, Mouse Y-self Y)*2
The '*2' part controls the smoothness. *1 is smooth as butter, *10 is more reactive, but still takes the mechanical edge off a direct constrain to mouse.
I've included a picture of some butter to help you imagine how smooth *1 is:
Here's another method:
When touch is pressed
--Constrain Linear Velocity X to 5* (mouse X - self X )
--Constrain Linear Velocity Y to 5* (mouse Y - self Y )
--Constrain Rotation to vectorToAngle(Linear Velocity X, Linear Velocity.Y )
. . . . . . . .
Otherwise
--Change attribute Linear Velocity X to 0
--Change attribute Linear Velocity Y to 0
@Socks! That looks very smooth!
@Player_E... there are a lot of answers for you
It's the smoothest drag in the whole of the app world, it's used extensively in butter related apps.
P.S . . . . . for the first version I posted above, this one . . .
When touch is pressed
--Constrain self rotation to: vectorToAngle(Mouse X-self X, Mouse Y-self Y)
--Move: Dir 0°: Relative - Actor: Speed: magnitude(Mouse X-self X, Mouse Y-self Y)*2
. . . the slide back to its original position would be placed in the otherwise section and would look like this:
When touch is pressed
--Constrain self rotation to: vectorToAngle(Origin X-self X, Origin Y-self Y)
--Move: Dir 0°: Relative - Actor: Speed: magnitude(Origin X-self X, Origin Y-self Y)*2
(Origin X and Origin Y are the coordinates for where you want it to return to)
Awesome guys!
I posted right before walking out the door for work, but glad there are so many other options.
I'll check them out tonight asap!
Thanks again
Here's another, a slightly slimmed down version of the above (all these variations offer different advantages / options):
When touch is pressed:
--Move:
----Dir: vectorToAngle(mouse X - self X, mouse Y - self Y)
----Speed: magnitude (mouse X - self X, mouse Y - self Y) *2
. . . . . . . . . . . . . . . .
Otherwise: (spring back to starting position)
--Move:
----Dir: vectorToAngle(Origin X - self X, Origin Y - self Y)
----Speed: magnitude (Origin X - self X, Origin Y - self Y) *10
(spring back looks better when the multiplier (the '*10' part) is bigger in the otherwise section than in the main section)
AaaaaaaAAAaa
Thanks for all the help guys.
I went with the last method you posted socks, but in the otherwise section, I left the interpolate rules. I like the way those look
When moving multiple people at the same time, it goes to touch 1 which is actor 1. When I changed it to touch 2, it works fine. However, when I released the touch on actor 1, actor 2 goes crazy and glitches in the scene.
@Titanical Tech Production That's not enough information to solve the issue you're having. We'd need to know what rules you're using for each actor related to touch.
New to GameSalad? (FAQs) | Tutorials | Templates | Greenleaf Games | Educator & Certified GameSalad User
Here is a screenshot of the rules. I took @Socks suggestion except changed the mouseX and MouseY to TouchX and TouchY.
By the way it is applied to both actors.
The most important part of that screenshot is... hidden:
You can either click on the 'e' symbols and take another screenshot or just click on the 'e' symbols and then highlight each expression and copy and paste them (as text) into a comment.
New to GameSalad? (FAQs) | Tutorials | Templates | Greenleaf Games | Educator & Certified GameSalad User
( game.Touches.Touch 1.X - self.Position.X ) * 10
( game.Touches.Touch 1.Y - self.Position.Y ) * 10
This is applied for both player 1 and player 2
So the player 2 actor uses game.Touches.Touch 2.X and Y?
New to GameSalad? (FAQs) | Tutorials | Templates | Greenleaf Games | Educator & Certified GameSalad User
Yes and what happens is when I let go of touch 1 then the AI cannot think and cannot decide which touch is engaged so the actor spins around the scene and causes glitches so the game is unplayable.