The 8direction behavior logic is basically:
save previous position of sprite
move sprite
if sprite overlaps a solid then move sprite back to it's previous position and stop it
The result is at higher speeds the sprite will stop short of the wall, which is the issue you're seeing.
In cases where that isn't acceptable then one option is to remove the solid behavior from the walls and handle it yourself with events. Here's one possible solution that also allows for wall sliding as well:
Or if you want something less deluxe you could do something as simple as:
if sprite overlaps a wall?
then repeatedly move backward until sprite no longer overlaps wall
and stop sprite
Or in events:
+-----------------------+
|sprite overlaps wall |
+-----------------------+
+--------------------+
|while | sprite: move -1 pixel at angle sprite.8Direction.MovingAngle
|sprite overlaps wall|
+--------------------+
+--------------------+
| | sprite: 8direction: stop
+--------------------+[/code:12g1y7kb]
The -1 means it moves a pixel at a time which makes the gap be less than 1. You could use -0.1 to make the gap smaller, it just would loop more.