Pouvoir mettre un sprite dans un sprite

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Pouvoir mettre un sprite dans un sprite

Message par SPH »

Fred,
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.

:idea: Si tu pouvais répondre........ :idea:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Pouvoir mettre un sprite dans un sprite

Message par G-Rom »

de mémoire , usebuffer() ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Pouvoir mettre un sprite dans un sprite

Message par Le Soldat Inconnu »

le plus simple reste de travailler sur des images et créer le sprite avec cette image, pour le moment.
j'espère également que ça va changer et que l'on aura accès à la couche alpha pour les sprites également
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Pouvoir mettre un sprite dans un sprite

Message par SPH »

Bon, je vais réessayer de tenter ca puisque la notice est encore valable sur pb 4.50 b4
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.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Re: Pouvoir mettre un sprite dans un sprite

Message par Huitbit »

Hello !
Bon, je vais réessayer de tenter ca puisque la notice est encore valable sur pb 4.50 b4
:mrgreen:
Tu trouveras la même chose dans l'aide de la 4.41 !
Ce qui n'est pas précisé, c'est que tu dois IMPERATIVEMENT mettre "directx7" dans les options du compilateur !

Chez nos voisins d'Outre-Manche, le débat est déjà enterré !

Quelques extraits...

http://www.purebasic.fr/english/viewtop ... it=sokoban
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.
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.
En conclusion (si tu ne veux pas travailler avec les images) :
Soit tu mets Directx7 dans les options du compilateur
Soit tu utilises grabsprite( )!
Soit il y a une autre méthode gardée jalousement par un utilisateur :lol: :lol: :lol:

La méthode de G-Rom propose juste une autre manière de concevoir les choses.

Hasta la vista !
Elevé au MSX !
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Pouvoir mettre un sprite dans un sprite

Message par SPH »

Huitbit a écrit :Soit il y a une autre méthode gardée jalousement par un utilisateur :lol: :lol: :lol:
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...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Pouvoir mettre un sprite dans un sprite

Message par TazNormand »

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.
Image
Image
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Pouvoir mettre un sprite dans un sprite

Message par SPH »

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.
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.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pouvoir mettre un sprite dans un sprite

Message par Backup »

en fait depuis le debut , je voudrai savoir a quoi ça sert concretement
de poser un sprite sur un sprite ? 8O
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Pouvoir mettre un sprite dans un sprite

Message par SPH »

Dobro a écrit :en fait depuis le debut , je voudrai savoir a quoi ça sert concretement
de poser un sprite sur un sprite ? 8O
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 ??
Et ouai, c'est aussi simple que ca.
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 !!!

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pouvoir mettre un sprite dans un sprite

Message par Backup »

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 !!!

il me semble que tu confond sprite et image !!
ce que tu souhaite faire , peut se faire en partant d'image, et non pas de sprites !

les sprites sont le résulat finale , celui qu'on affiche a l'ecran
tout les traitements devrai etre fait avant l'utilisation du sprite

donc tu te prepare une image (ou plusieurs) qui contiennent tes "avatars" , tes "etoiles"
puis ensuite tu grab ce que tu veux dans le sprite que tu veux

on ne montre au finale que le sprite (constitué d'images,ou de morceau d'image)

il ne sert a rien de partir de sprite, pour faire un autre sprite
et quand bien meme , l'exemple que je t'ai donné dans l'autre post
te permet de faire un sprite en utilisant le dessin d'un autre sprite ...

ou j'ai pas tout compris là :)


revoici l'exemple de copie de l'image d'un sprite dans un autre :

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 
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Pouvoir mettre un sprite dans un sprite

Message par SPH »

il me semble que tu confond sprite et image !!
LOOOOL, nan, quand meme pas !!
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)

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). :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Pouvoir mettre un sprite dans un sprite

Message par Backup »

SPH a écrit :
il me semble que tu confond sprite et image !!
LOOOOL, nan, quand meme pas !!
je parle dans l'utilisation que tu en fais ! :)
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)
voila c'est bien ce que je dis !
pourquoi ne pas utiliser des images pour construire ton sprite ?
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). :mrgreen:
personne n'a parlé d'idée farfelue ! ;)
mais oui , je suis d'accords avec toi, si on peut mieux , je prends :)

en attendant , utilise les image comme support de graph d'origine (comme une banque de graph)
que tu peux piocher et poser dans les sprites que tu veux !
meme en faisant des mélanges .... :)

là ou je dis que tu confond sprite et image
c'est qu'un sprite n'est qu'un cadre vide , une cellule !!

alors que l'image c'est le dessin , que tu peux coller dans la cellule !
d'ailleurs c'est ce qu'on fait !

on creer la cellule vide, 'le sprite'

Code : Tout sélectionner

******************* creation du sprite original celui qu'on va copier *********************
CreateSprite(#sprite_original, taille_x_origine, taille_y_origine) 
et ensuite on dessine une image dedans

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() 
ou

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() 

l'image ici est bien la banque d'information !
que le sprite (la cellule vide) va recevoir ! :)

j'ai vu certain code ici ou les mecs utilisent directement une image sur l'ecran
alors que justement les sprites sont fait pour ça !

on ne devrai pas dessiner une image directement sur l'ecran.. (meme si on peut) ; sauf si c'est une question de format d'image
comme on ne devrai pas utiliser les sprites comme des images ( comme tu veux le faire )

mais bon ... :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Pouvoir mettre un sprite dans un sprite

Message par Le Soldat Inconnu »

je suis d'accord avec Dobro, vu ce que tu veux faire, crée tes sprites à partir d'images et non de sprite :)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Re: Pouvoir mettre un sprite dans un sprite

Message par Huitbit »

Hello,

Si on veut modifier les sprites "en direct" les startdrawing() dans la boucle principale ça craint un peu !
c'est très gourmand non ? Il y a pas mal de personnes qui passent par les sprites pour afficher le score rien que pour éviter ça !
Le problème c'est qu'il n'y a pas d'images sans startdrawing() !

Grabsprite(), c'est bien, en plus ça offre des options supplémentaires :
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.
Je suis peut-être complètement à côté de la plaque mais ce passage par les images ne me semble pas judicieux !

Hasta la vista !
Elevé au MSX !
Répondre