With the while loop in [Step], it looks like you've set it up to move completely to its destination every frame. Presumably, you'd want something more like this:
[Create]
///Speed, distance to travel and starting direction
movespeed = 2;
movedirection = 1; //choose starting direction, 1 for right -1 for left
traveldistance = 64;
startingx = x;
destination = startingx + traveldistance * movedirection;
[Step]
x += movedirection*movespeed;
if (x == destination) {
movedirection *= -1;
destination = startingx + traveldistance * movedirection;
}
That way, each time [Step] happens, the x coordinate will only be moved a little bit rather than continuing to move all the way to the destination. Note that I've moved the calculation of destination into [Create], and also put a recalculation of it inside the if statement in [Step].
Something to watch out for: If you ever need to move in non-integer increments, or your traveldistance isn't divisible by your movespeed, the == check for destination won't work and your platform will continue past its destination. Even when using only integers, it's safer to use some form of range check. Since there are two directions, it's a bit more to write, but something like this could do the job:
if ((movedirection == -1 && x <= destination) || (movedirection == 1 && x >= destination))