Hacktendo:Advanced Sprite Movement
From Hack Wars Wiki
This is code from a script controlling a sprite within the Final Fantasy remake that I had intended to make. It allows you to hold down a key and walk with the frames of the sprite changing while you are walking. It is outdated code and may not work exactly with the new scripting engine; however, I hope this code may be useful in figuring out how to deal with changing frames and movement of a sprite.
Code
setImage(0); int x=getX(); int y=getY(); int z=getZ(); int frame=getFrame(); int movetime=10; int moveamount=5; int movebamount=-5; int movex=0; int movey=0; int lefttime=0; int righttime=0; int uptime=0; int downtime=0; lefttime=checkTimeStamp("left"); righttime=checkTimeStamp("right"); downtime=checkTimeStamp("down"); uptime=checkTimeStamp("up"); if(getKeyDownCount()>0){ int key=getNextKeyDown(); if (key==37) { if (x>0) setLocal("movex",movebamount); setFrame(1); setLocal("dir", "left"); deleteTimeStamp("left"); createTimeStamp("left"); } if (key==39) { setLocal("movex", moveamount); setFrame(3); setLocal("dir", "right"); deleteTimeStamp("right"); createTimeStamp("right"); } if (key==40) { setLocal("movey",moveamount); setFrame(7); setLocal("dir", "down"); deleteTimeStamp("down"); createTimeStamp("down"); downtime=movetime; } if (key==38) { if (y>0) setLocal("movey",movebamount); setFrame(5); setLocal("dir", "up"); deleteTimeStamp("up"); createTimeStamp("up"); uptime=movetime; } } movex=getLocal("movex"); movey=getLocal("movey"); string direction=getLocal("dir"); int bla=0; if (movex!=0) { bla=x+movex; if (bla>=0) { if (direction=="left") { if (lefttime>=movetime) { deleteTimeStamp("left"); createTimeStamp("left"); if (frame==1) { setFrame(0); } if (frame==0) { setFrame(1); } setX(bla); } } if (direction=="right") { if (righttime>=movetime) { if (frame==3) { setFrame(2); } if (frame==2) { setFrame(3); } setX(bla); deleteTimeStamp("right"); createTimeStamp("right"); } } } } if (movey!=0) { bla=y+movey; if (bla>=0) { if (direction=="down") { if (downtime>=movetime) { if (frame==7) { setFrame(6); } if (frame==6) { setFrame(7); } else setFrame(6); setY(bla); deleteTimeStamp("down"); createTimeStamp("down"); } } if (direction=="up") { if (uptime>=movetime) { if (frame==5) { setFrame(4); } if (frame==4) { setFrame(5); } else setFrame(4); setY(bla); deleteTimeStamp("up"); createTimeStamp("up"); } } } } while(getKeyUpCount()>0) { int key=getNextKeyUp(); if (key==37 || key==39) { setLocal("movex",0); if (direction=="left") setFrame(0); if (direction=="right") setFrame(2); } if (key==40 || key==38) { setLocal("movey",0); if (direction=="up") setFrame(4); if (direction=="down") setFrame(6); } } |
