They are moving any direction (360 degrees)
You can use Tween instead of MoveTo. Tween will change X coordinate, and Sine will change Y.
I tried this and it worked but didn't look as good as they would go different speeds depending on the distance
If your character is moving horizontally only, then instead of "MoveTo On Arrived" event you can simply compare X-coordinate. If Character.X=targetX, then it has arrived.
I tried this too as I figured it will still work but it was really hit and miss for some reason. I can't figure out why, may experiment with it more.
Another solution is to use a separate invisible sprite for character, with MoveTo, but without the Sine - let's call it CharacterBase. And you will have to set your visible Character sprite position on every tick to CharacterBase + Sine offset.
If I'm still having no luck I'll investigate this.
Thanks for the great ideas!