transparence sprite sans ralentissement ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Message par kwandjeen »

voici en tga avec couche alpha
image tga
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Message par kwandjeen »

sinon j'en suis là avec gestion des entrées et sortie pour les menus

Code : Tout sélectionner

;**************************************
;      creatin du menu intro pour
;          industrial manager
;
;           kwandjeen studio
;              août  2006
;**************************************

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

;*********** 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
Global posx_mouse
Global posy_mouse
Global valid_fade_in = 1
Global valid_fade_out = 0
Global pos_menu_x = 400
Global valid_mouse = 1
Global page_a_venir
;************** declaration des procedures ****************
Macro position_souris
  ExamineMouse()                
      posx_mouse = MouseX()                        
      posy_mouse = MouseY()
EndMacro
Macro gestion_fade
  If valid_fade_in = 1 
    valid_mouse = 0
    pos_menu_x = pos_menu_x-(pos_menu_x/15)-1
      If pos_menu_x <= 1
        valid_fade_in =0
        pos_menu_x = 0
        valid_mouse = 1
      EndIf
  EndIf
  
  If valid_fade_out = 1
    valid_mouse = 0 
    pos_menu_x = pos_menu_x+(1*(pos_menu_x/10))+1
      If pos_menu_x >=350
        valid_fade_out =0
        pos_menu_x = 0
        page_courante = page_a_venir
        valid_fade_in = 1 : pos_menu_x = 400
      EndIf
  EndIf  
EndMacro

;***** fin des procedures *********************************

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()
      
      position_souris
       
      If page_courante = #page_principale
        Gosub menu_principal
      EndIf
      If page_courante = #page_solo
        Gosub menu_principal
      EndIf    
      DisplayTransparentSprite(#sprite_mouse1, posx_mouse, posy_mouse)
                    
    ExamineKeyboard()
    Else           
        Delay(100)
    EndIf
    
  Until event$ = "fin_programme"
  
Else
  MessageRequester("Erreur", "impossible d'afficher 1024*768 - 32 bit screen !", 0)
EndIf

;*********** affichage du menu principal ****************************
menu_principal:
gestion_fade

      If Start3D()
        DisplaySprite3D(#sprite3d_fond_console,660+pos_menu_x,84,180)
      Stop3D()
      EndIf
      DisplayTransparentSprite(#sprite_bordure,660+pos_menu_x,84)
      
  If posy_mouse>(128) And posy_mouse<(185) And posx_mouse>(709) And posx_mouse<(934) And valid_mouse = 1
    DisplayTransparentSprite(#sprite_sur_solo,709,129)
    etat$ = "solo"
  Else
    son_solo = 1
    DisplayTransparentSprite(#sprite_solo,709+pos_menu_x,129)
  EndIf
  If posy_mouse>(229) And posy_mouse<(287) And posx_mouse>(709) And posx_mouse<(934)And valid_mouse = 1
    DisplayTransparentSprite(#sprite_sur_multi,709,229)
    etat$ = "multi"
  Else
    son_multi = 1
    DisplayTransparentSprite(#sprite_multi,709+pos_menu_x,229)
  EndIf  
  If posy_mouse>(328) And posy_mouse<(385) And posx_mouse>(709) And posx_mouse<(934)And valid_mouse = 1
    DisplayTransparentSprite(#sprite_sur_option,709,328)
    etat$ = "option"
  Else
    son_option = 1
    DisplayTransparentSprite(#sprite_option,709+pos_menu_x,328)
  EndIf  
  If posy_mouse>(428) And posy_mouse<(486) And posx_mouse>(709) And posx_mouse<(934)And valid_mouse = 1
    DisplayTransparentSprite(#sprite_sur_credit,709,428)
    etat$ = "credit"
  Else
    son_credit = 1
    DisplayTransparentSprite(#sprite_credit,709+pos_menu_x,428)
  EndIf  
 
  If posy_mouse>(584) And posy_mouse<(642) And posx_mouse>(709) And posx_mouse<(934)And valid_mouse = 1
    DisplayTransparentSprite(#sprite_sur_quitter,709,584)
    etat$ = "quitter"
  Else
    son_quitter = 1
    DisplayTransparentSprite(#sprite_quitter,709+pos_menu_x,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" : page_a_venir = #page_solo : valid_fade_out = 1 :etat$ = "": EndIf
   ;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
les medias

s'il y a un truc que je peux améliorer ou si ma méthode n'est pas très bonne (oui j'ai une petite tête et je fais avec ça) dites le moi.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Le clearscreen ne sert à rien, puisque tu écrases le fond avec drawimage. Sinon, ça fonctionne, no prob. Les sprites 3d seraient plus rapides, mais pour un menu, pas la peine de s'embêter.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Bah déjà un DrawImage est beaucoup plus lent qu'un DrawSprite, sans compter le startdrawing... Sinon ton PC plante quand tu veux créer ton PNG avec ton soft de dessin ou quand tu veux le charger avec PB ?

Dri
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Message par kwandjeen »

Alors mon PC plantait quand je chargeais le png dans pure car je n'avais pas initialisé le decoder png (non pas les doigts).

Vous pensez qu'avec mon image de 1024*768 ce serait plus judicieux d'utiliser un sprite ?
Les sprites 3d seraient plus rapides, mais pour un menu, pas la peine de s'embêter.
Pour tout mes sprites il vaudrait mieux utiliser les sprite3d ?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

kwandjeen a écrit :Alors mon PC plantait quand je chargeais le png dans pure car je n'avais pas initialisé le decoder png (non pas les doigts).

Vous pensez qu'avec mon image de 1024*768 ce serait plus judicieux d'utiliser un sprite ?
Les sprites 3d seraient plus rapides, mais pour un menu, pas la peine de s'embêter.
Pour tout mes sprites il vaudrait mieux utiliser les sprite3d ?
La différence entre un sprite et une image c'est que le sprite n'existe QUE si un écran est créé (plein écran ou dans une fenêtre) et que le format du sprite est le même que celui de l'écran. Du coup, l'affichage des sprite est direct (pas de conversion nécessaire...)

De plus pour aficher ton image tu est obligé de passer par StartDrawing qui ajoute un temps supplémentaire en particulier pour une suele image.

Pour les Sprite3D, ca ne serait peut être pas plus rapide, en particulier pour l'image de 1024*768. Enfin bon maintenant tu devrais être en mesure de tester ton sprite (on va pas taper les doigts, sinon comment t'utilises ton clavier ? =)

Dri
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Message par kwandjeen »

ok merci pour tous ces renseignements et pour le temps passé à m'aider

:wink:
Répondre