y a t'il moyen de faire un ClipSprite sur l'ecran ?
de façon que les sprites que j'affiches sur l'ecran ne s'affiche que dans une zone bien précise ?
Si quelqu'un a une idée/solution, ou si vous retrouvez le sujet ou on en a parler je suis interessé

pourquoi ne pas utiliser un Sprite qui servirai de Masque !!Thyphoon a écrit :Bon je sais qu'on en a déjà parler. Mais impossible de trouver le le sujet avec le moteur de recherche.
y a t'il moyen de faire un ClipSprite sur l'ecran ?
de façon que les sprites que j'affiches sur l'ecran ne s'affiche que dans une zone bien précise ?
Si quelqu'un a une idée/solution, ou si vous retrouvez le sujet ou on en a parler je suis interessé
Dobro l'homme qui repond plus vite que son ombre !Et je t'en remercie vivement.Dobro a écrit : pourquoi ne pas utiliser un Sprite qui servirai de Masque !!
un sprite de la taille de l'ecran, et tu met en transparence une region, ce qui permetrai de voir les autre sprites derriere, seulement dans cette region ..
d'un autre coté tu ne precise pas grand chose, on peut pas deviner ce que tu veux faire
Thyphoon a écrit :Dobro l'homme qui repond plus vite que son ombre !Et je t'en remercie vivement.Dobro a écrit : pourquoi ne pas utiliser un Sprite qui servirai de Masque !!
un sprite de la taille de l'ecran, et tu met en transparence une region, ce qui permetrai de voir les autre sprites derriere, seulement dans cette region ..
d'un autre coté tu ne precise pas grand chose, on peut pas deviner ce que tu veux faire
J'y ai déjà pensé, mais c'est un peu lourd. ça m'oblige faire un grab sur l'ecran, tracer la zone transparente, tracer ce que je veux sur l'ecran pour apres retracer le sprite qui sert de masque.
J'avais pensé aussi a dessiner directement sur un sprite normal et utiliser clipsprite mais le problème c'est que j'utilise des sprites3D et dessiné des sprite3D sur un sprite c'est pour l'instant pas possible avec les fonctions native.
Y a vraiment des gens qu'ont rien d'autre à foutre que de rester au lit à regarder passer les avions!Dobro a écrit :Thyphoon a écrit :Dobro l'homme qui repond plus vite que son ombre !Et je t'en remercie vivement.Dobro a écrit : pourquoi ne pas utiliser un Sprite qui servirai de Masque !!
un sprite de la taille de l'ecran, et tu met en transparence une region, ce qui permetrai de voir les autre sprites derriere, seulement dans cette region ..
d'un autre coté tu ne precise pas grand chose, on peut pas deviner ce que tu veux faire
J'y ai déjà pensé, mais c'est un peu lourd. ça m'oblige faire un grab sur l'ecran, tracer la zone transparente, tracer ce que je veux sur l'ecran pour apres retracer le sprite qui sert de masque.
J'avais pensé aussi a dessiner directement sur un sprite normal et utiliser clipsprite mais le problème c'est que j'utilise des sprites3D et dessiné des sprite3D sur un sprite c'est pour l'instant pas possible avec les fonctions native.
pourquoi ? tu ne clip pas toujours au meme endroit ??![]()
en principe un clip d'ecran sert par exemple a faire passer un avion devant une fenetre , et que l'observateur est sur son lit en train de regarder dehors ...
il ne voit pas l'avion arriver de la gauche, il le voit seulement traverser la fenetre, puis disparaitre vers le bords droite de sa fenetre , caché par le mur ...
là c'est un peu différent. C'est pour mon Frontend. Lorsque j'affiche la liste des jeux. Si le titre est trop grand le titre du jeu defile. Le problème c'est que je ne peux pas afficher la moitié d'une lettre par exemple.Dobro a écrit : pourquoi ? tu ne clip pas toujours au meme endroit ??![]()
en principe un clip d'ecran sert par exemple a faire passer un avion devant une fenetre , et que l'observateur est sur son lit en train de regarder dehors ...
il ne voit pas l'avion arriver de la gauche, il le voit seulement traverser la fenetre, puis disparaitre vers le bords droite de sa fenetre , caché par le mur ...
Chris a écrit : Y a vraiment des gens qu'ont rien d'autre à foutre que de rester au lit à regarder passer les avions!
Oui c'est ce que je viens de faire...mais le problème c'est que l'antialiasing des polices de caractères modifie ligèrement la couleur transparente au tour des lettres donc tu as le bord du text qui n'est pas du tout propre ...case a écrit :heuu facile
tu cree un sprite de la taille de ta zone d'affichage et au lieu de faire
startdrawing(screenoutput())
tu fais
startdrawing(spriteoutput(sprite))
tu dessine tes lettres avec drawtext ()
stopdrawing()
tu affiche tes sprites 3D du fond
tu affiche ton sprite ou tu as ecrit ton texte
et voila ton texte ne depassera Jamais la taille de ton sprite une fois affiché a l'ecran
Code : Tout sélectionner
clearscreen() ;efface l'ecran
dispaysprite3D() ; affiche les sprite 3D en fond
if issprite(monsprite) ; verrifie si monsprite existe
freesprite(monsprite) ; et le suprime de la memoire si il existe
endif ; pour eviter de bouffer de la memoire pour rien
grabsprite(monsprite,x,y,l,h) ; je cree monsprite en prenant la zone de l'ecran ou je vais le reafficher
startdrawing(spriteoutput(monsprite)) ; je dessine dans mon sprite
drawtext(blabla) ; j'ecris le texte
stopdrawing()
displaysprite(monsprite,x,y) ; j'affiche monsprite
[code]
cela devrais resoudre ton probleme :)
Code : Tout sélectionner
ProcedureDLL.l ClipScreen3D()
Protected Clip.l, *ViewPort.D3DVIEWPORT7
Protected Sprite3DDevice.IDirect3DDevice7
!EXTRN _PB_Direct3D_Device
!MOV Eax, dword [_PB_Direct3D_Device]
!MOV dword [p.v_Sprite3DDevice], Eax
!EXTRN _PB_3DViewPort
!MOV dword [p.p_ViewPort], _PB_3DViewPort
*ViewPort\dwX = 0
*ViewPort\dwY = 0
*ViewPort\dwWidth = ScreenWidth()
*ViewPort\dwHeight = ScreenHeight()
*ViewPort\dvMinZ = 0.0
*ViewPort\dvMaxZ = 1.0
If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
Clip = #True
EndIf
ProcedureReturn Clip
EndProcedure
;******************************************************************************************************
ProcedureDLL.l ClipScreen3D2(x.l, y.l, Width.l, Height.l)
Protected Clip.l, *ViewPort.D3DVIEWPORT7
Protected Sprite3DDevice.IDirect3DDevice7
!MOV Eax, dword [_PB_Direct3D_Device]
!MOV dword [p.v_Sprite3DDevice], Eax
!MOV dword [p.p_ViewPort], _PB_3DViewPort
*ViewPort\dwX = x
*ViewPort\dwY = y
*ViewPort\dwWidth = Width
*ViewPort\dwHeight = Height
*ViewPort\dvMinZ = 0.0
*ViewPort\dvMaxZ = 1.0
If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
Clip = #True
EndIf
ProcedureReturn Clip
EndProcedure
;******************************************************************************************************
ProcedureDLL.l ClipScreen3D3(x.l, y.l, Width.l, Height.l, MinZ.f, MaxZ.f)
Protected Clip.l, *ViewPort.D3DVIEWPORT7
Protected Sprite3DDevice.IDirect3DDevice7
!MOV Eax, dword [_PB_Direct3D_Device]
!MOV dword [p.v_Sprite3DDevice], Eax
!MOV dword [p.p_ViewPort], _PB_3DViewPort
*ViewPort\dwX = x
*ViewPort\dwY = y
*ViewPort\dwWidth = Width
*ViewPort\dwHeight = Height
*ViewPort\dvMinZ = MinZ
*ViewPort\dvMaxZ = MaxZ
If Sprite3DDevice\SetViewport(*ViewPort) = #S_OK
Clip = #True
EndIf
ProcedureReturn Clip
EndProcedure