If you convert your .png file to a .bmp file, it will work with the colorkey ( the edited code here calls for it).
As to the sprite frame issue, what is happening is definitely weird. What I did to work around it is to check the current frame of the sprite against the intended animation frame to be played. If the frame is not within that particular range, it is set to the first frame of the animation.
sync rate 60
keypress = 0
set image colorkey 32, 156, 0
create animated sprite 1, "Character.bmp", 3, 4, 1
sprite 1, 308, 224, 1
scale sprite 1,300
min = 0 : max = 0 : SpritePlaying = 0
do
if spritePlaying = 0
keypress = 0
if rightkey() then keypress = 1
if leftkey() then keypress = 2
if upkey() then keypress = 3
if downkey() then keypress = 4
select keypress
case 1
if sprite frame(1) < 4 or sprite frame(1) > 6 then set sprite frame 1,4
play sprite 1, 4, 6, 120 : min = 4 : max = 6 : SpritePlaying = 1
endcase
case 2
if sprite frame(1) < 10 then set sprite frame 1,10
play sprite 1, 10, 12, 120 : min = 10 : max = 12
SpritePlaying = 1
endcase
case 3
if sprite frame(1) < 1 or sprite frame(1) > 3 then set sprite frame 1,1
play sprite 1, 1, 3, 120 : min = 1 : max = 3
SpritePlaying = 1
endcase
case 4
if sprite frame(1) < 7 or sprite frame(1) > 9 then set sprite frame 1,7
play sprite 1, 7, 9, 120 : min = 7 : max = 9
SpritePlaying = 1
endcase
rem case default : set sprite frame 1, 8 : endcase
endselect
else
play sprite 1,min,max,120
if sprite frame(1) >= max then SpritePlaying = 0
endif
sync
loop
Also, I added some variables so that you only check for a keypress when the animation is done playing. You may not like it like that, but it seems like that unless you hold the button down, the animation won't play fully. Since they are very short animations, I didn't figure it would be a problem.
EDIT: Oh, I made the sprite bigger too. It was so small it was hard to easily see the animation. Just take out the scaling on it.
Anyway, I hope this helps you.
So many games to code.......so little time.