Conclusion : le mieux est encore de dupliquer les tiles...
Dommage, car je connais 2 ou 3 basic qui incluent le flip horizontal et vertical en commandes, c'est assez pratique et utile pour un jeu vidéo.
peut etre dans une future version ?
COSMOS THE SECRET MELODY
Re: COSMOS THE SECRET MELODY
C'est vrai que dupliquer les tiles est un peu relou.. Mais du moment qu'on le sait, ça va vite.
A l'ouverture de ta planche de tiles, tu fais une nouvelle image de celle ci que tu flip via la proce d'ollivier et hop.. c'est réglée.
Pour la creation de tes sprites, si tu as une image avec 5 tiles 1.2.3.4.5 et que tu les flip, c'est sur que ça va faire 5.4.3.2.1 donc faudra juste penser à les graber dans l'autre sens.
A l'ouverture de ta planche de tiles, tu fais une nouvelle image de celle ci que tu flip via la proce d'ollivier et hop.. c'est réglée.
Pour la creation de tes sprites, si tu as une image avec 5 tiles 1.2.3.4.5 et que tu les flip, c'est sur que ça va faire 5.4.3.2.1 donc faudra juste penser à les graber dans l'autre sens.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: COSMOS THE SECRET MELODY
pour le flip des sprites, j'avais fait ça il n'y a pas longtemps
https://www.purebasic.fr/french/viewtop ... te#p205505
c'est toujours le meme principe , on met l'image ou le sprite en tableau , puis on utilise ce tableau pour réafficher le sprite changé ...
https://www.purebasic.fr/french/viewtop ... te#p205505
c'est toujours le meme principe , on met l'image ou le sprite en tableau , puis on utilise ce tableau pour réafficher le sprite changé ...
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: COSMOS THE SECRET MELODY
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
plutot que de le faire en temps réel voici un moyen de le faire au moment du grabsprite()
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
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
Re: COSMOS THE SECRET MELODY
merci pour votre aide
En tout cas : pour une prochaine version de PUREBASIC, intégrer une commande FLIPSPRITE
(présente sur de nombreux basic)
j'ai une question existentielle sur les fontes mais je je vais créer un topic....
En tout cas : pour une prochaine version de PUREBASIC, intégrer une commande FLIPSPRITE
(présente sur de nombreux basic)
j'ai une question existentielle sur les fontes mais je je vais créer un topic....
Re: COSMOS THE SECRET MELODY
Oui, la commande n'existe pas en Pb.
Une autre solution possible (je ne crois pas qu'elle ait été cité précédemment) c'est de permettre de voir l'envers du sprite quand il est retourné avec transformsprite().
Cherche "disable backface culling" sur le forum anglais...
C'est aussi rapide qu'un TransformSprite() et pas prise de tête.
Code adapté pour x64 et x86 par Djes...
Une autre solution possible (je ne crois pas qu'elle ait été cité précédemment) c'est de permettre de voir l'envers du sprite quand il est retourné avec transformsprite().
Cherche "disable backface culling" sur le forum anglais...
C'est aussi rapide qu'un TransformSprite() et pas prise de tête.
Code adapté pour x64 et x86 par Djes...
Code : Tout sélectionner
InitSprite()
InitKeyboard()
OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,WindowWidth(0),WindowHeight(0))
;Disable Backface Culling
;from : http://www.forums.purebasic.com/english/viewtopic.php?f=16&t=43718
Define pd3d.IDirect3DDevice9
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
EnableASM
!extrn _PB_Screen_Direct3DDevice
!MOV dword EAX, [_PB_Screen_Direct3DDevice]
!MOV dword [v_pd3d],EAX
DisableASM
CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
EnableASM
!extrn PB_Screen_Direct3DDevice
!MOV dword EAX, [PB_Screen_Direct3DDevice]
!MOV dword [v_pd3d],EAX
DisableASM
CompilerElse
Debug "Unsupported processor"
End
CompilerEndIf
pd3d\SetRenderState(22,1)
pd3d\SetRenderState(7,0)
Procedure FlipSprite(sprite.i,flip.i)
If flip
TransformSprite(0,SpriteWidth(0),0,0,0,0,SpriteHeight(0),SpriteWidth(0),SpriteHeight(0))
Else
TransformSprite(0,0,0,SpriteWidth(0),0,SpriteWidth(0),SpriteHeight(0),0,SpriteHeight(0))
EndIf
EndProcedure
;-create sprite
CreateSprite(0,128,128)
StartDrawing(SpriteOutput(0))
Circle(32,32,64,#Red)
Box(64,32,64,32,#Green)
StopDrawing()
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
EndSelect
Until Event=0
ExamineKeyboard()
ClearScreen(#Black)
If KeyboardPushed(#PB_Key_Space)
FlipSprite(0,1)
Else
FlipSprite(0,0)
EndIf
DisplaySprite(0,32,32)
FlipBuffers()
Delay(1)
ForEver
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits