That's close to what I meant. I think the 8direction behavior just gets in the way.
The 8direction behavior already limits the speed to the maxSpeed so all you need to do should be:
1. set velocity of x and y to 0.
2. when a direction key is pressed add to the velocity a direction vector:
maxSpeed*cos(a), maxSpeed*sin(a)
That should handle diagonals and such, unless something I'm not aware of occurs in the behavior.
An alternate idea is to have a hidden object with 8dir that you move normally but without collisions. The rotate that object's velocity and set the velocity of a visible object. It would give smoother speeding up and slowing down, but it still wouldn't update the velocity when hitting solids.
dropbox.com/s/v41o4p8qxsd5tdh/rotated_8dir.capx
Or here is an older example of the 8dir behavior done with events sans collisions. You just set the angle of the sprite and motion will be relative to that.
There may be a simpler way. I guess I didn't really answer your question. But having a few example of various ways to do it could be useful?