sinon on peux utiliser clipsprite pour faire un flip
mais par contre on peux pas le flipper dans les deux sens a la fois avec cette technique
Code : Tout sélectionner
Declare vflipsprite(spr,xx,yy)
Declare hflipsprite(spr,xx,yy)
InitSprite()
main=OpenWindow(#PB_Any,0,0,800,600,"")
scr=OpenWindowedScreen(WindowID(main),0,0,800,600)
StartDrawing(ScreenOutput())
Box(0,0,32,32,$ff00ff)
Box(0,0,32,4,$ffffff)
Box(0,0,4,32,$ffffff)
StopDrawing()
spr1=GrabSprite(#PB_Any,0,0,32,32)
ClearScreen(0)
t=ElapsedMilliseconds()
Repeat
ev=WaitWindowEvent(0)
DisplaySprite(spr1,0,0)
vflipsprite(spr1,64,0)
hflipsprite(spr1,128,0)
FlipBuffers()
Until ev=#PB_Event_CloseWindow
Procedure vflipsprite(spr,xx,yy)
sh= SpriteHeight(spr)
shh=sh-1
sw=SpriteWidth(spr)
For yf=0 To shh
ClipSprite(spr,0,yf,sw,1)
DisplaySprite(spr,xx,yy+shh-yf)
Next
ClipSprite(spr,0,0,sw,sh)
EndProcedure
Procedure hflipsprite(spr,xx,yy)
sh= SpriteHeight(spr)
sw=SpriteWidth(spr)
sww=sw -1
For xf=0 To sww
ClipSprite(spr,xf,0,1,sh)
DisplaySprite(spr,xx+sww-xf,yy)
Next
ClipSprite(spr,0,0,sw,sh)
EndProcedure
plutot que de le faire en temps réel voici un moyen de le faire au moment du grabsprite()
Code : Tout sélectionner
Declare vflipsprite(spr,xx,yy)
Declare hflipsprite(spr,xx,yy)
Declare GrabSp(x,y,l,h)
InitSprite()
main=OpenWindow(#PB_Any,0,0,800,600,"")
scr=OpenWindowedScreen(WindowID(main),0,0,800,600)
; crée un sprite
StartDrawing(ScreenOutput())
Box(0,0,32,32,$ff00ff)
Box(0,0,32,4,$ffffff)
Box(0,0,4,32,$ffffff)
StopDrawing()
; structure utilise pour la demonstration
Structure sprite
orientation.i[4]
EndStructure
; liste des sprites
Global NewList sprite.sprite()
;
GrabSp(0,0,32,32)
ClearScreen(0)
t=ElapsedMilliseconds()
Repeat
ev=WaitWindowEvent(0)
DisplaySprite(sprite()\orientation[0],0,0)
DisplaySprite(sprite()\orientation[1],40,0)
DisplaySprite(sprite()\orientation[2],80,0)
DisplaySprite(sprite()\orientation[3],120,0)
FlipBuffers()
Until ev=#PB_Event_CloseWindow
Procedure vflipsprite(spr,xx,yy)
sh= SpriteHeight(spr)
shh=sh-1
sw=SpriteWidth(spr)
For yf=0 To shh
ClipSprite(spr,0,yf,sw,1)
DisplaySprite(spr,xx,yy+shh-yf)
Next
ClipSprite(spr,0,0,sw,sh)
EndProcedure
Procedure hflipsprite(spr,xx,yy)
sh= SpriteHeight(spr)
sw=SpriteWidth(spr)
sww=sw -1
For xf=0 To sww
ClipSprite(spr,xf,0,1,sh)
DisplaySprite(spr,xx+sww-xf,yy)
Next
ClipSprite(spr,0,0,sw,sh)
EndProcedure
Procedure GrabSp(x,y,l,h)
AddElement(sprite())
sprite()\orientation[0]=GrabSprite(#PB_Any,x,y,l,h) ; sprite original
hflipsprite(sprite()\orientation[0],x,y)
sprite()\orientation[1]=GrabSprite(#PB_Any,x,y,l,h)
vflipsprite(sprite()\orientation[0],x,y)
sprite()\orientation[2]=GrabSprite(#PB_Any,x,y,l,h)
vflipsprite(sprite()\orientation[1],x,y)
sprite()\orientation[3]=GrabSprite(#PB_Any,x,y,l,h)
EndProcedure