Lucas Tiridath,
I posted in the AppGameKit product section about the physics prediction,
here's the link to the thread. third post from the bottom has the basic code I use, I've done a couple of updates since, but this is the basic idea.
RichardH,
I use my own physics system for this:
function choose()
background=CreateSprite(img.backgrounddark) `img is a type containing all the image id's
SetSpriteSize(background,100,100)
`*
off as float `the X position of the most left selection
spd as float `the curent speed that the selections are moving
spd=-3 `initial speed to be sending the selections left
off=99 `set the initial offset to the far right
oldx as float `old X position of the pointer (last frame)
newx as float `new X position of the pointer (this frame)
tmpsiz as float `I forgot what this does :)
for k = 1 to maxstages `maximum number of levels
s_id[k]=CreateSprite(s_img[k]) `s_id is an array (len=maxstages) of sprite id's, s_img contains the image id's (not in type img because AGK doesn't support arrays in types
SetSpriteSize(s_id[k],40,60)
SetSpritePosition(s_id[k],off+((k-1)*42),25) `set position offseted by X and sprite index
next
back=MakeButton(3,3,15,10,img.back1,img.back2) `MakeButton is a custom function, back is a UDT
SetSpriteColorAlpha(back.id,0) ` back.id is the sprite id of the sprite ;/
playmode=0 `used in the main loop to select which screen to go to
ka=0 `was just a (for alpha) but a is used elsewhere. fades in the Back button
sync() `delete any GetPointer events from the last screen
do
if ka<255
inc ka,10
if ka>255 then ka=255
SetSpriteColorAlpha(back.id,ka) `fade in the BAck button
endif
back=DoButton(back) `function that handles button events
if back.state=2 `state=1=button down, state=2=button released
playmode=screen_menu `set the main loop to go to menu loop (screen_menu is a constant)
exit`leave this loop to go back to main loop
endif
if GetPointerPressed() `Set various coors
oldx=GetPointerX()
newx=GetPointerX()
startx=GetPointerX()
endif
if GetPointerState()
oldx=newx
newx=GetPointerX()
spd=newx-oldx ` set the speed that the thinggies are moving based on left/right movement
endif
if GetPointerReleased()
if diff(startx,newx)<1 `diff calculates the difference between variables
sprt=GetSpriteHit(GetPointerX(),GetPointerY())
for k = 1 to maxstages
if sprt=s_id[k]
lift(s_id[k])
playmode=screen_choose2
param1=k `param1 is a global that is passed by the main loop to the next function
exit
endif
next
endif
endif
off=off+spd `set the offset by current speed
for k = 1 to 5
if spd>0.1*k then spd=spd-0.01*k `friction
if spd<0-0.1*k then spd=spd+0.01*k `friction, more friction the faster it's going
next
if spd<0.1 and spd>0-0.1 then spd=0 ` if it's going slow enough the stop it altogether
if off > 90 then spd = spd - 0.5 `if it goes past the rightedge then stop it and send it back
if off > 100
off=100
spd=0
endif
if off < 0-(maxstages*42)+20 then spd = spd + 0.5
if off < 0-maxstages*42+10
off=0-maxstages*42+10
spd=0
endif
for k = 1 to maxstages `set the size and postion of the selections based on their offset
tmpsiz=diff((off+((k-1)*42)+10),50)
if tmpsiz>99 then tmpsiz=99
SetSpriteSize(s_id[k],40-(tmpsiz/5),(40-(tmpsiz/5))*1.5)
SetSpritePosition(s_id[k],off+((k-1)*42),25+(tmpsiz/10))
next
if playmode<>0 then exit
DoTouch() ` whoops, this doesn't need to be called
sync()
loop
DeleteAllSprites()
endfunction
I've considered putting in a level editor for players, but probably not as it would require a lot of work to put one in. If the app goes well, I might make a sequel or an update that has a level editor in it.
My current level editor is a real pain to use

it's good enough for me, but I'd definitely need to massively improve it for a release version.