Publié : dim. 13/août/2006 17:46
voici en tga avec couche alpha
image tga
image tga
Forums PureBasic - Français
http://forums.purebasic.com/french/
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
Pour tout mes sprites il vaudrait mieux utiliser les sprite3d ?Les sprites 3d seraient plus rapides, mais pour un menu, pas la peine de s'embêter.
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...)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 ?
Pour tout mes sprites il vaudrait mieux utiliser les sprite3d ?Les sprites 3d seraient plus rapides, mais pour un menu, pas la peine de s'embêter.