Here's a slightly tweaked version of the code that rotates the sprites, or does it ?
screenvsync on
LoadfxImage "balloon1.bmp",1
LoadfxImage "balloon2.bmp",2
LoadfxImage "balloon3.bmp",3
LoadImage "back.jpg",8
CacheImageSize=256+128
CreateIMage 11,CacheImageSize,CacheImageSize
CreateIMage 12,CacheImageSize,CacheImageSize
CreateIMage 13,CacheImageSize,CacheImageSize
how_many = 50
Type Bubble
x#,y#,XSpeed#,Yspeed#
EndType
Dim balloons(how_many) As Bubble
; set up how_many balloons , there start x,y position and there xspeed and yspeed
For amount=1 To how_many
balloons(amount).x# = Rnd(1000)
balloons(amount).y# = Rnd(700)
balloons(amount).xspeed# = RndRange#(1,4)
balloons(amount).yspeed# = RndRange#(1,4)
CreateSprite amount
SpriteImage amount,10+rndrange(1,3)
centerspritehandle amount
Next amount
// create an extra sprite we'll use to pre-render the balloon images rotating
Spr=NewSprite( CacheImageSize/2, CacheImageSize/2,11)
spritedrawmode spr,2
spritefilter spr,true
; main loop , draw background then the amount of balloons set by how_many
Do
drawimage 8,0,0,0
// draw rotated versions to 3 balloon images,to 3 different images
spritevisible spr,true
rendertoimage 11
cls 0
spriteimage spr,1
centerspritehandle spr
drawsprite spr
rendertoimage 12
cls 0
spriteimage spr,2
centerspritehandle spr
drawsprite spr
// draw the
rendertoimage 13
cls 0
spriteimage spr,3
centerspritehandle spr
drawsprite spr
turnsprite Spr,1
spritevisible spr,false
rendertoscreen
For amount=1 To how_many
balloons(amount).x#=balloons(amount).x#+balloons(amount).xspeed#
balloons(amount).y#=balloons(amount).y#+balloons(amount).Yspeed#
If balloons(amount).x#<-200 Or balloons(amount).x#>1200 then balloons(amount).xspeed#=balloons(amount).xspeed#*-1
If balloons(amount).y#<-200 Or balloons(amount).y#>1000 Then balloons(amount).yspeed#=balloons(amount).yspeed#*-1
PositionSprite amount,balloons(amount).x#,balloons(amount).y#
Next amount
DrawAllSprites
Sync
Loop