Hi there !
Here is a sample game that shows how to smoothly move a sprite or an item across the screen.
It's a star field, where each star tile smoothly goes to the left.
The idea is to use the frame command to tell each star to show its next animation image (the animation mimics a right to left movement within 8x8 pixels), and when the animation is over, display the star tile to the left and go on with the animation.
All is commented in the source.
Star animation.zip (2.6 KB)
In the Game script:
on load do
starInterval = 2 // frames between each animation (0 = fast // 10+ = slow)
starMaxFrame = 8 // number of animation frames for each star tile
starCurFrame = 0 // current frame of each star tile
frameTimer = 0 // current frame number, reset each "starInterval" frames
starCurFrame = 0 // id of the current animation frame of each star tile
end
on loop do // automatically called 20x per second
frameTimer++
if frameTimer>=starInterval then // wait is over, lets do animate or move star
frameTimer = 0 // reset timer
starCurFrame++ // add 1 to the current animation frame of star tiles
if starCurFrame>=starMaxFrame then // 1 anim cycle is over 'move star to the left
starCurFrame = 0
emit "starMoveLeft"
else // animate star (= small left movement illusion)
emit "starAnimate"
end
end
end
In the Star (item) script:
on starMoveLeft do // move the current star tile 1 square to the left
newX = event.x
if newX>0 then // still displayed ?
newX--
newY = event.y
swap "black"
tell newX,newY to
swap "star"
end
else // the star touched the left side, let's display it to the right
call "starRestart"
end
end
on starAnimate do // change the animation frame
frame starCurFrame
end
on starRestart do
swap "black" // hide the star that touched the left side
tell 23,event.y to // respawn it to the right of the same line
swap "star"
end
end
The global speed of the animation is set with starInterval. It's the number of frames during which no animation is played. (Pulp calls loop 20x per second, to give an idea)
So, each time we have spent starInterval frames in the loop event, we activate the next animation step: 1) display the next frame of each star tile or, if we are at the last frame, 2) move the star tile to the left, using swap command.