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

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
Merci pour vos réponses qui m'ont ouvert le sprite. euh la voie pardon.

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
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
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.
Si ça fonctionne mais que je ne sais pas le faire taper pas trop fort sur la tête

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.

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

Tu veux qu'on te tape avec quoi?
EDIT: Grilled by Dri

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

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