Page 1 sur 2

transparence sprite sans ralentissement ?

Publié : ven. 11/août/2006 18:27
par kwandjeen
Bon j'ai un petit problème et je dois surement pas utiliser la bonne méthode.

Je m'explique je suis entrain de faire un menu et j'ai le fond de mon menu qui est semi-transparent.

pour faire c'est effet j'ai utilisé la commande

Code : Tout sélectionner

DisplayTranslucentSprite(0, 660, 84, 180)
[\code]
 mais avec cette commande je tombe à 0 fps alors qu'avec le sprite sans alpha cela tourne normalement.

Donc est il possible d'avoir une transparence sans que cela altère trop mes performances ?  :( 

si quelqu'un avait un tuyau ce serait cool merci !!!  :wink:

Publié : ven. 11/août/2006 22:35
par Flype
à mon avis tu ne dois pas utiliser correctement les commandes 'StartSpecialFX()' et 'StopSpecialFx()'.
Regarde surtout l'aide (F1) pour ces fonctions et les examples de purebasic.
Sinon passe aux commandes Sprite3D...

Publié : sam. 12/août/2006 0:14
par Dr. Dri
Sinon y'a les Sprite3D qui sont bien plus puissants ^^
Mais là y faut redimensionner ton image à une puisance de 2

Dri

Publié : sam. 12/août/2006 8:06
par kwandjeen
ok je vais voir ça merci :D

Publié : sam. 12/août/2006 11:53
par Dr. Dri
Tu as un exemple avec des Sprite3D ici
http://purebasic.hmt-forum.com/viewtopi ... 8793#48793

Opacité progressive, ca rame pas d'un pouce chez moi (et mon PC n'est pas une référence en matière de puissance...)

Le lien de la démo:
vu3.zip

Dri ;)

Publié : sam. 12/août/2006 16:18
par kwandjeen
Ok merci à vous j'y suis enfin arrivé.

Je suis une grosse b.... j'avais pas initialisé les sprite3d et défini le mode loadsprite avec #PB_Sprite_Texture.

J'avais fait ce menu avec DBP et je ne pouvais pas croire que cela ne fonctionnait pas en pure :cry:

Merci pour vos réponses qui m'ont ouvert le sprite. euh la voie pardon. :wink:

Publié : dim. 13/août/2006 3:53
par Dr. Dri
kwandjeen a écrit :J'avais fait ce menu avec DBP et je ne pouvais pas croire que cela ne fonctionnait pas en pure :cry:
Peut-être que tu devrais te remettre en question d'abord. Le PB ne fonctionne pas forcément comme DBP, poste nous un exemple de ce que t'essayes de faire (avec des images bidons =) et on pourra surement t'aider à le faire correctement. Y'a surement un truc qui fait que ca rame à mort...

Dri ;)

Publié : dim. 13/août/2006 14:01
par kwandjeen
Image

Voilà l'image finale sur DBP en fait il n'y a que 2 images puisque DBP prends en compte la couche alpha directement.

Il a fallu que je décompose la console en plusieurs image pour avoir une transparence au niveau du fond bleu.
Au départ j'ai utilisé un sprite translucent pour le fond mais étant trop grand ça rame complètement.

Avec un sprite3D ça passe normalement.

je suis entrain de refaire les images et le code aux propres que je mettrai là pour que vous puissiez me corriger.

Publié : dim. 13/août/2006 14:04
par kwandjeen
D'ailleurs ce serai bien que fred ajoute la prise en compte de la couche alpha pour les images. :lol:

Si ça fonctionne mais que je ne sais pas le faire taper pas trop fort sur la tête :oops: siouplai.

Publié : dim. 13/août/2006 15:23
par Dr. Dri
kwandjeen a écrit :D'ailleurs ce serai bien que fred ajoute la prise en compte de la couche alpha pour les images. :lol:
C'est déjà disponible, seulement il semblerait que ca ne soit pas encore stable... Donc Si tu as une image PNG, charge ton sprite avec l'option #PB_Sprite_AlphaBlending

Dri ;)

Publié : dim. 13/août/2006 15:23
par djes
Ca fonctionne depuis la version 4 :lol:
Tu veux qu'on te tape avec quoi? :D

EDIT: Grilled by Dri :lol:

Publié : dim. 13/août/2006 15:36
par kwandjeen
Bon voici ce que j'ai fait avec les medias.

ici pour les medias fichier rar

Code : Tout sélectionner

;**************************************
;      creatin du menu intro pour
;          industrial manager
;**************************************

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
  MessageRequester("Erreur", "Pas de détection de directx 7 ou supérieur", 0)
  End
EndIf
InitSprite3D()
If InitSound() = 0
  MessageRequester("Erreur", "Pas de détection de directx 7 ou supérieur et/ou de carte son", 0)
  End
EndIf
UseJPEGImageDecoder()
UseTGAImageDecoder()

;*********** declaration des constante *****************
Enumeration ;-------- enumeration des images
#image_fond_menu
EndEnumeration

Enumeration ;-------- enumeration des sprites
#sprite_fond_console
#sprite3d_fond_console
#sprite_bordure
#sprite_solo
#sprite_sur_solo
#sprite_multi
#sprite_sur_multi
#sprite_option
#sprite_sur_option
#sprite_credit
#sprite_sur_credit
#sprite_quitter
#sprite_sur_quitter

#sprite_mouse1
EndEnumeration

Enumeration
#page_principale
#page_solo
#page_multi
#page_option
#page_credit
#page_quitter
EndEnumeration

Enumeration
#son_bouton
EndEnumeration

Global son_solo
Global son_multi
Global son_option
Global son_credit
Global son_quitter
Global etat$
Global page_courante = #page_principale


If OpenScreen(1024, 768, 32, "industrial manager")
LoadImage(#image_fond_menu,"media\image_fond_menu.jpg")

LoadSprite(#sprite_fond_console,"media\fond_console.bmp",#PB_Sprite_Texture)
CreateSprite3D(#sprite3d_fond_console,#sprite_fond_console)

LoadSprite(#sprite_bordure,"media\bordure_console.bmp")
LoadSprite(#sprite_solo,"media\bouton_solo.bmp")
LoadSprite(#sprite_sur_solo,"media\bouton_sur_solo.bmp")
LoadSprite(#sprite_multi,"media\bouton_multi.bmp")
LoadSprite(#sprite_sur_multi,"media\bouton_sur_multi.bmp")
LoadSprite(#sprite_option,"media\bouton_option.bmp")
LoadSprite(#sprite_sur_option,"media\bouton_sur_option.bmp")
LoadSprite(#sprite_credit,"media\bouton_credit.bmp")
LoadSprite(#sprite_sur_credit,"media\bouton_sur_credit.bmp")
LoadSprite(#sprite_quitter,"media\bouton_quitter.bmp")
LoadSprite(#sprite_sur_quitter,"media\bouton_sur_quitter.bmp")
LoadSprite(#sprite_mouse1,"media\mouse1.bmp")

LoadSound(#SOn_bouton,"sons\bip_console_2.WAV")

  Repeat
  FlipBuffers()
  ClearScreen(RGB(0,0,0))
    If IsScreenActive()     
      
      If StartDrawing(ScreenOutput())
      DrawImage(ImageID(#image_fond_menu),0,0)
      EndIf
      StopDrawing()
      
      ExamineMouse()                
      posx_mouse = MouseX()                        
      posy_mouse = MouseY() 
       
      If page_courante = #page_principale
        Gosub menu_principal
      EndIf   
      DisplayTransparentSprite(#sprite_mouse1, posx_mouse, posy_mouse)                    
    ExamineKeyboard()
    Else           
        StopSound(-1)
        Delay(20)
    EndIf
    
  Until KeyboardPushed(#PB_Key_Escape)
  
Else
  MessageRequester("Erreur", "impossible d'afficher 1024*768 - 32 bit screen !", 0)
EndIf



menu_principal:
      If Start3D()
        DisplaySprite3D(#sprite3d_fond_console,660,84,180)
      Stop3D()
      EndIf
      DisplayTransparentSprite(#sprite_bordure,660,84)
      
  If posy_mouse>(128) And posy_mouse<(185) And posx_mouse>(709) And posx_mouse<(934)
    DisplayTransparentSprite(#sprite_sur_solo,709,129)
    etat$ = "solo"
  Else
    son_solo = 1
    DisplayTransparentSprite(#sprite_solo,709,129)
  EndIf
  If posy_mouse>(229) And posy_mouse<(287) And posx_mouse>(709) And posx_mouse<(934)
    DisplayTransparentSprite(#sprite_sur_multi,709,229)
    etat$ = "multi"
  Else
    son_multi = 1
    DisplayTransparentSprite(#sprite_multi,709,229)
  EndIf  
  If posy_mouse>(328) And posy_mouse<(385) And posx_mouse>(709) And posx_mouse<(934)
    DisplayTransparentSprite(#sprite_sur_option,709,328)
    etat$ = "option"
  Else
    son_option = 1
    DisplayTransparentSprite(#sprite_option,709,328)
  EndIf  
  If posy_mouse>(428) And posy_mouse<(486) And posx_mouse>(709) And posx_mouse<(934)
    DisplayTransparentSprite(#sprite_sur_credit,709,428)
    etat$ = "credit"
  Else
    son_credit = 1
    DisplayTransparentSprite(#sprite_credit,709,428)
  EndIf  
 
  If posy_mouse>(584) And posy_mouse<(642) And posx_mouse>(709) And posx_mouse<(934)
    DisplayTransparentSprite(#sprite_sur_quitter,709,584)
    etat$ = "quitter"
  Else
    son_quitter = 1
    DisplayTransparentSprite(#sprite_quitter,709,584)
  EndIf 
  

If etat$="solo" And son_solo=1 : PlaySound(#Son_bouton) : son_solo=0 : EndIf
If etat$="multi" And son_multi=1 : PlaySound(#Son_bouton) : son_multi=0 : EndIf
If etat$="option" And son_option=1 : PlaySound(#Son_bouton) : son_option=0 : EndIf
If etat$="credit" And son_credit=1 : PlaySound(#Son_bouton) : son_credit=0 : EndIf 
If etat$="quitter" And son_quitter=1 : PlaySound(#Son_bouton) : son_quitter=0 : EndIf

If MouseButton(#PB_MouseButton_Left)
   ;If etat$ = "solo"
   ;If etat$ = "multi" 
   ;If etat$ = "option" 
   ;If etat$ = "credit"
   If etat$ = "quitter" : Goto fin_programme : EndIf
Else 
  etat$=""
EndIf
   
Return

;************** vidange memoire *******************
fin_programme:
For i=0 To 100
  If IsImage(i)<>0
    FreeImage(i)
  EndIf
  If IsSprite(i)<>0
    FreeSprite(i)
  EndIf
  If IsSprite3D(i)<>0
    FreeSprite3D(i)
  EndIf
  If IsSound(i)<>0
    FreeSound(i)
  EndIf
Next
End
Je sais pas si c'est une bonne solution pour faire un menu mais j'attends vos remarques(constructives)

Publié : dim. 13/août/2006 15:41
par Dr. Dri
kwandjeen a écrit :Bon voici ce que j'ai fait avec les medias.

ici pour les medias fichier rar
Commence par faire des tests de la couche Alpha avec l'image que tu utilisais avec DBP

Dri

PS. djes t'es pas assez rapide 8):P

Publié : dim. 13/août/2006 16:03
par kwandjeen
j'ai essayé avec une image png mais ça me fait planter le PC ???

bon mon logiciel de dessin ne génère pas de couche alpha en png en fait donc j'ai essayé avec un tiff mais à marche pas ??

Code : Tout sélectionner

LoadSprite(25,"media\essai.tif",#PB_Sprite_AlphaBlending|#PB_Sprite_Texture)
c'est bien comme cela qu'il faut déclarer le sprite ?

Publié : dim. 13/août/2006 16:31
par djes
Envoie ton image...