Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Dealing with Touch

edited July 2012 in General Posts: 266

In my game right now, im controlling the gravity just by tapping. i want to change the controls so that when i swipe up the physics.gravity is -physics.gravity() and when i swipe down its regular gravity. i will post my code if anyone asks for more help. i just can't get the touch.deltaY down. any help? i tried referrring to @ruilov's pacman example but couldn't find that code snippet

Tagged:

Comments

  • Posts: 489

    What determines what constitutes a 'vertical swipe'? Is it where the touch ends compared to where it started? For example:

    function setup()
    end
    
    function draw()
        background(0)
    end
    
    function touched(touch)
        local id = touch.id
        local state = touch.state
        local x = touch.x
        local y = touch.y
        if state == BEGAN then
            swipeId = id  -- Preserve the id
            swipeX = x    -- Preserve the position
            swipeY = y
            return
        end
        if state == ENDED and id == swipeId then
            swipeId = nil
            if math.abs(x - swipeX) < 100 then -- Within tolerance?
                if swipeY - y > 100 then       -- Long enough?
                    print("Swipe down")
                end
                if y - swipeY > 100 then       -- Long enough?
                    print("Swipe up")
                end
            end
        end
    end
    

                   

  • Posts: 266

    thanks @mpilgrem. just a quick question is there any way to detect with a user swipes up twice. For example, right now when you swipe up or down in my game, the gravity changes and you lose a point. Is there any way to detect if a person swiped up twice and ignore the function to print swipe up twice. it's just a little bug in my game and I'm not sure how to fix it.

  • Posts: 738

    You'll need to track whether the user has already made a swipe and need to allow them a certain amount of time to get a second one in. The following adapts @mpilgrem's example for the up swipe only. If you add more interactions the logic will become more complex and you may want to spend more time thinking out a more elegant solution (e.g. What happens with an up and down swipe. Or an up swipe and a short tap), but this rough solution should work. Note the locations of the print statements this represents where the decision on a single or double swipe is met.

    function setup()
        firstswipe=0
        timer=0
        timeout=20
    end
    
    function draw()
        background(0)
        if firstswipe==1 then 
            timer = timer + 1
            if timer>timeout then --time limit for user to get a second swipe in
                timer=0
                firstswipe=0
                print("Swipe up")
            end
        end
    end
    
    function touched(touch)
        local id = touch.id
        local state = touch.state
        local x = touch.x
        local y = touch.y
        if state == BEGAN then
            swipeId = id  -- Preserve the id
            swipeX = x    -- Preserve the position
            swipeY = y
            return
        end
        if state == ENDED and id == swipeId then
            swipeId = nil
            if math.abs(x - swipeX) < 100 then -- Within tolerance?
                if swipeY - y > 100  then       -- Long enough?
                    print("Swipe down")
                end
                if y - swipeY > 100 and firstswipe==0 then       -- Long enough?
               
                    firstswipe=1
                elseif y - swipeY > 100 and firstswipe==1 then       -- Long enough?
                    print("Double Swipe up")
                    firstswipe=0
                end            
            end
        end
    end
    
  • I detected horizontal and vertical swipes in my program (I don't have access to the code now, but I might post it later) by checking if the length of the swipe is greater than a certain number, then checking which direction it is closest to. This makes the swipe length the same, even if the user swipes at a slight angle. I found this more comfortable than checking just the x or y length, which would require the user to swipe longer if they are swiping at an angle, providing less consistency.

Sign In or Register to comment.