I'll explain my personal workflow for games like this:
Create an invisible sprite as the player, where I will do all the events.
Create a sprite to be a mask over the real player, it will show all the player animations and is only for this purpose.
Create the follow behaviors:
Invisible Player: Platform; Bound to layout;
Player mask: Pin and deactivate the collision for this object (left menu, on the bottom, lastest option);
Create the follow instance variables:
Invisible Player: attack_ON: false; health: 10;
Configure the platform behavior to meet your requirements.
Now, follow the events:
ON START OF LAYOUT > Set player mask.X -> Invisible Player.X;
Set player mask.Y -> Invisible Player.Y;
Pin player mask -> Invisible Player;
Now, go inside the image editor for the player, setup his size and collision polygons to be smaller than the player mask and square, also, put the animation loop OFF;
On the player mask, import the player frames, also, make all the collision polygons to be square, these polygons will not be used on the game. Put the animation to loop or not, do what you feel better.
Separate the animation types, like attack, on another animation name.
Configure the attack animation to be with the frame animation = 0 and setup the looping to not happen.
On the event sheet, do the follow code:
On Key X press > Player Mask animation -> "attack";
animation frame = "your desired frame";
With a CAPX it would be easier to explain.