You would be better off using a timer or enterFrame to measure the velocity of the object and then change the animation based on that measurement.
The sprite listener is for sprite events only.
local obj = display.newSprite( ... your args ... ) physics.addBody( obj ) function obj.enterFrame( self ) local vx, vy = self:getLinearVelocity() local v = math.sqrt( vx \* vx + vy \* vy ) if( v \< 5 and self.sequence ~= "walk" ) then self:setSequence("walk") elseif( v \< 10 and self.sequence ~= "run" ) then self:setSequence("run") else -- do a default thing here end end Runtime:addEventListener( "enterFrame", obj )