Hello all,
I would like to share the below example of smooth momentum-based scrolling. The method was adopted from this article: http://ariya.ofilabs.com/2011/10/flick-list-with-its-momentum-scrolling-and-deceleration.html
I have noticed that touch.deltaY doesn’t always capture the expected initial velocity. I think a solution may include a rolling average of deltaY for the last n number of frames. Suggestions are welcome. What do you guys think?
EDIT: I have found a much simpler solution. Turns out the last deltaY from the moving state can be used. I have modified the below code to include this.
-- Text Scroll
function setup()
amplitude = 0
delta = 0
timeConstant = 10
scaleFactor = 8
step = 6 * timeConstant + 1
position = HEIGHT / 2
parameter.watch("amplitude")
parameter.watch("delta")
parameter.watch("position")
sText = "You find yourself washed up on the grainy shore of what appears to be a derserted tropical island. The Sun is scorching. You know it's been at least a day or two (maybe more) since you've had anything to eat or drink. You need to find shelter and some source of nurishment."
end
-- This function gets called once every frame
function draw()
-- This sets a dark background color
background(40, 40, 50)
-- This sets the line thickness
strokeWidth(5)
-- Do your drawing here
textWrapWidth(WIDTH-10)
if step < 6 * timeConstant then
delta = amplitude / timeConstant
position = position + delta
amplitude = amplitude - delta
step = step + 1
end
text(sText, WIDTH/2, position)
end
function touched(t)
if t.state == MOVING then
position = position + t.deltaY
lastDelta = t.deltaY
end
if t.state == ENDED then
amplitude = lastDelta * scaleFactor
step = 0
print(amplitude)
end
end