Posted: 3rd Jan 2012 9:14
Summary: An object falls. When the screen is pressed on the right side an impulse is added in the positive X direction and upward (to counteract gravity). When the screen is pressed on the left side, vice versa. The object wraps around the screen (exits right, enters left : exits bottom, enters top)

+ Code Snippet
if GetPointerX () > 400
            if GetSpritePhysicsVelocityX(saucerSprite) >= 400 then saucerSpriteVelocityX = 0 else saucerSpriteVelocityX = 100
            SetSpritePhysicsImpulse(saucerSprite,GetSpriteXByOffset(saucerSprite),GetSpriteYByOffset(saucerSprite),saucerSpriteVelocityX,-150)
        endif
        if GetPointerX () < 400
            if GetSpritePhysicsVelocityX(saucerSprite) <= -400 then saucerSpriteVelocityX = 0 else saucerSpriteVelocityX = 100
            SetSpritePhysicsImpulse(saucerSprite,GetSpriteXByOffset(saucerSprite),GetSpriteYByOffset(saucerSprite),-saucerSpriteVelocityX,-150)
        endif


Question: I've noticed that without the cap on horizontal velocity, there is still an actual cap (which I'm detecting to be around 600). Added to this curiosity is that when I let the object free fall, the horizontal velocity will drop after about 500 vertical velocity as if it were being dampened (dampening is set to 0).

Why is this?
Posted: 3rd Jan 2012 17:54
I haven't experienced this myself. Can you produce a simple demo that shows this?
Posted: 5th Jan 2012 9:37
Just use a dummy (64x64 is what I'm using) sprite for Saucer.png. Running this on the phone max velocity caps out around 410. It's having something to do with the maximums within the physics engine itself, but the annoying thing is how the vector is "stealing" from the other direction (vertical taking velocity from horizontal).

+ Code Snippet
rem Landscape App
SetDisplayAspect( 4.0/3.0 )
SetVirtualResolution (800,480)

rem Load Saucer
saucerImage = LoadImage ("arena\Saucer.png")
saucerSprite = CreateSprite (saucerImage)

rem Setup Physics
SetSpriteShape (saucerSprite, 3)
SetSpritePhysicsOn (saucerSprite, 2)
SetSpritePhysicsCanRotate (saucerSprite, 0)
SetSpritePhysicsMass(saucerSprite,1)
SetSpritePhysicsDamping(saucerSprite, 0)

SetPhysicsGravity (0, 500)
SetPhysicsWallLeft (0)
SetPhysicsWallRight (0)

SetPhysicsWallTop (0)
SetPhysicsWallBottom (0)

do
    if GetPointerPressed() = 1


        if GetPointerX () > 400
            if GetSpritePhysicsVelocityX(saucerSprite) >= 400 then saucerSpriteVelocityX = 0 else saucerSpriteVelocityX = 100
            SetSpritePhysicsImpulse(saucerSprite,GetSpriteXByOffset(saucerSprite),GetSpriteYByOffset(saucerSprite),saucerSpriteVelocityX,-150)
        endif
        if GetPointerX () < 400
            if GetSpritePhysicsVelocityX(saucerSprite) <= -400 then saucerSpriteVelocityX = 0 else saucerSpriteVelocityX = 100
            SetSpritePhysicsImpulse(saucerSprite,GetSpriteXByOffset(saucerSprite),GetSpriteYByOffset(saucerSprite),-saucerSpriteVelocityX,-150)
        endif
    endif
    if GetSpriteX(saucerSprite) > 800 then teleportPhysicsObject(saucerSprite, -64, GetSpriteY(saucerSprite))
    if GetSpriteX(saucerSprite) < -64 then teleportPhysicsObject(saucerSprite, 800, GetSpriteY(saucerSprite))

    if GetSpriteY(saucerSprite) > 480 then teleportPhysicsObject(saucerSprite, GetSpriteX(saucerSprite), -64)
    if GetSpriteY(saucerSprite) < -64 then teleportPhysicsObject(saucerSprite, GetSpriteX(saucerSprite), 480)

    print(str(GetSpritePhysicsVelocityX(saucerSprite)))
    print(str(GetSpritePhysicsVelocityY(saucerSprite)))
    Sync()
loop

function teleportPhysicsObject(object, xValue, yValue)
    objectVelocityX = GetSpritePhysicsVelocityX(object)
    objectVelocityY = GetSpritePhysicsVelocityY(object)
    SetSpritePhysicsOff (object)
    SetSpriteX (object, xValue)
    SetSpriteY (object, yValue)
    SetSpritePhysicsOn (object, 2)
    SetSpritePhysicsVelocity (object, objectVelocityX, objectVelocityY)
endfunction
Posted: 5th Jan 2012 13:45
Yes, there does appear to be some kind of limit. It's about 600 on my machine.

I don't see it "stealing" anything from the horizontal movement, that just seems like natural reduction that would occur in real life. As the gravity is pulling your object downward it's horizontal movement would reduce down to zero.

If you want more control over the movement you could try setting gravity to zero in both directions?