ce serait bien de pouvoir faire un displaysprite (et transparentsprite) dans un sprite.
Et ce serait top si en plus, on pouvait utiliser l'alpha et autres options des sprites existants.


Syntaxe :
UseBuffer(#Sprite)
Description :
Change la surface de rendu par défaut (l'ecran) par le #Sprite. Ainsi, toutes les commandes du type DisplaySprite(), DisplayTransparentSprite() etc.. seront appliquées sur le #Sprite.
Pour revenir en mode normal (surface écran), il suffit de remplacer #Sprite par #PB_Default.
Bon, je vais réessayer de tenter ca puisque la notice est encore valable sur pb 4.50 b4
Please search the forums next time as this has been discussed very often in the past. The UseBuffer() isn't supported with the DirectX9 subsystem, only with DirectX7. There nothing you can do except using DX7 as default.
En conclusion (si tu ne veux pas travailler avec les images) :It's pointless because you don't read carefully. It's simply not possible, technically. There are no sprites in DX9 anymore. Everything is done via textures/surfaces. Just realize that DX7 is outdated technology.
J'ai une idée qui me vient comme ca : ouvrir un screen invisible et le dédier aux superpositions de sprites puis au grab. C'est peut etre la plus elegante methode finalement...Huitbit a écrit :Soit il y a une autre méthode gardée jalousement par un utilisateur![]()
![]()
![]()
OUI MAIS : si ton ecran actuel est remplis de graphs et que tu veux tamponer un sprite sur un sprite, comment ferais tu sur ton unique ecran sans effacer une zone pour faire ta manip !! Tu perds du temps aussi. Tandis que laisser un screen de petite taille ouvert mais invisible, ca ne bouffe qu'un peu de memoire mais c'est un sacrifice acceptable.TazNormand a écrit :Salut SPH,
Ce sera surement plus lourd qu'un "grab", un screen bouffe de la place en mémoire, surtout si tu ne t'en sers qu'occasionnellement.
Imagine que tu as 100 sprites d'avatars de 100*100, des sprites d'étoiles (une etoile quoi) rouge, verte, bleues, des sprites representant 10 bannieres differentes, bref, pleins de sprites en vue de créer un gros sprite representant un menu (genre le menu des joueurs présents a droite dans mon jeu), tu fais comment ??Dobro a écrit :en fait depuis le debut , je voudrai savoir a quoi ça sert concretement
de poser un sprite sur un sprite ?
SPH a écrit : Imagine que tu as 100 sprites d'avatars de 100*100, des sprites d'étoiles (une etoile quoi) rouge, verte, bleues, des sprites representant 10 bannieres differentes, bref, pleins de sprites en vue de créer un gros sprite representant un menu (genre le menu des joueurs présents a droite dans mon jeu), tu fais comment ??
Plus simple : les briques du casses briques que j'ai mis dans JEU. Je les mets en sprite. Mais si je veux appliquer sur ces sprites un sprite en 50% alpha simulant une lumiere qui rend un arrondi a la brique.
Et il y a des tas d'effets que l'on pourrait faire :
un sprite de 400 sur 400 sur lequel on tampone des sprites en forme de tache en alpha x%. Ce sprite servirait de texture a un sprite 3D que l'on etirerait a 410*410. Puis on le grab au centre a 400*400. On boucle : Hooooo, un tres bel effet !!!
Code : Tout sélectionner
Enumeration
#sprite_original
#sprite_copie
#image_tampon
EndEnumeration
; Test
ExamineDesktops()
EcranX =DesktopWidth(0)
EcranY =DesktopHeight(0)
InitSprite(): InitKeyboard()
;hwnd=OpenWindow(1,0,0,EcranX,EcranY,"test", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget )
OpenScreen (EcranX,EcranY,32,"Test")
; *********** dessine le sprite *****************
taille_x_origine=32
taille_y_origine=32
taille_x_copie=32
taille_y_copie=32
; ******************* creation du sprite original celui qu'on va copier *********************
CreateSprite(#sprite_original, taille_x_origine, taille_y_origine)
; dessine le sprite
StartDrawing(SpriteOutput(#sprite_original))
Box( 0,0, taille_x_origine, taille_y_origine,RGB(255,166,56))
Circle(taille_x_origine/2,taille_y_origine/2,taille_y_origine/2,RGB(0,0,0))
StopDrawing()
; ***********************************************************************************
; voici comment copier un sprite sur un autre
; ******************** copie du sprite ***********************
CreateSprite(#sprite_copie, taille_x_copie, taille_y_copie)
; copie le sprite dans une image
StartDrawing(SpriteOutput(#sprite_original)) ; on va creer une image a partir du sprite original
Resultat = GrabDrawingImage(#image_tampon, 0,0,taille_x_origine, taille_x_origine) ; on creer l'image
StopDrawing()
; creer le sprite copie; avec l'image piqué sur le sprite oiriginal
StartDrawing(SpriteOutput(#sprite_copie)) ; creer le sprite qui va recevoir l'image du sprite original
Resultat = DrawImage(ImageID(#image_tampon),0,0, taille_x_copie, taille_x_copie) ; on 'tamponne' l'image du sprite original dans le sprite copie
StopDrawing()
; *********************************************************
x_origine=100
y_origine=EcranY/2
x_copie= 300
y_copie=EcranY/2
Repeat
; ****************** affichage du resultat ***************************
DisplaySprite(#sprite_original,x_origine,y_origine) ; affiche le sprite original
DisplaySprite(#sprite_copie,x_copie,y_copie) ; affiche sa copie
; ********************************************************************
StartDrawing(ScreenOutput())
DrawText(EcranX/2,(EcranY/2)+50,"appuis sur Escape pour quitter",RGB($FF,$FF,$FF))
StopDrawing()
FlipBuffers()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
ClearScreen(0)
ForEver
LOOOOL, nan, quand meme pas !!il me semble que tu confond sprite et image !!
je parle dans l'utilisation que tu en fais !SPH a écrit :LOOOOL, nan, quand meme pas !!il me semble que tu confond sprite et image !!
voila c'est bien ce que je dis !J'ai bien des petits sprites qui vont construire un sprite (je precise que ce dernier gros sprite change de forme régulierement). J'ai donc des sprites fixes créant un gros sprite qui evolue (si il n'evoluait pas, ce serait facile, evidement)
personne n'a parlé d'idée farfelue !Ce serait quand meme plus facile d'avoir une seule instruction dx9 qui fasse ca; instruction qui existait et qui montre que ce n'etait pas une idee si farfelue finalement (instruction que MOI, j'utiliserais a tout bout de champ).
Code : Tout sélectionner
******************* creation du sprite original celui qu'on va copier *********************
CreateSprite(#sprite_original, taille_x_origine, taille_y_origine)
Code : Tout sélectionner
StartDrawing(SpriteOutput(#sprite_original))
Box( 0,0, taille_x_origine, taille_y_origine,RGB(255,166,56))
Circle(taille_x_origine/2,taille_y_origine/2,taille_y_origine/2,RGB(0,0,0))
StopDrawing()
Code : Tout sélectionner
StartDrawing(SpriteOutput(#sprite_original)) ; creer le sprite qui va recevoir l'image du sprite original
Resultat = DrawImage(ImageID(#image_tampon),0,0, taille_x_copie, taille_x_copie) ; on 'tamponne' l'image du sprite original dans le sprite copie
StopDrawing()
Je suis peut-être complètement à côté de la plaque mais ce passage par les images ne me semble pas judicieux !0 : Mode par défaut (le sprite est chargé dans la mémoire video, si possible)
#PB_Sprite_Memory : Le sprite est chargé dans la mémoire principale du PC (plus lent sauf en mode SpecialFX())
#PB_Sprite_Alpha : Le sprite est au format 8 bits (256 couleurs) en niveau de gris utilisé par DisplayAlphaSprite(), DisplayShadowSprite() ou DisplaySolidSprite()
#PB_Sprite_Texture : Le sprite est créé avec le support 3D (texture) nécessaire à la fonction CreateSprite3D() de la bibliothèque Sprite3D.