petit test en 3d:
code+archive
Code : Tout sélectionner
;***********************************************
;Titre : terre 3d
;Auteur : Raven d'aprés le code de cooldj
;Date :26/09/2014
;Heure :08:06:47
;Version Purebasic : PureBasic 5.23 LTS (Windows - x86)
;Version de l'editeur :EPB V2.58
; Libairies necessaire : Aucune
;***********************************************
InitEngine3D()
InitKeyboard()
InitMouse()
InitSprite()
UsePNGImageDecoder()
UseJPEGImageDecoder()
Declare AffText(Text$,x.i,y.i,light.i)
If OpenScreen(1024,768,32,"Terre3d") = 0
MessageBox_ (0,"Impossible d'ouvrir un écran 1024x768x32@75hz", "ERREUR", #MB_ICONINFORMATION|#MB_OK) :End
EndIf
Enumeration
#terre
#vaisseau
#titre
EndEnumeration
CatchSprite(#vaisseau,?vaisseau,#PB_Sprite_BlendSourceAlpha)
CatchSprite(#titre,?titre,#PB_Sprite_BlendSourceAlpha)
Add3DArchive("media", #PB_3DArchive_FileSystem)
CreateCamera(0,0,0,100,100)
MoveCamera(0, 0, 10,40, #PB_Absolute)
CameraLookAt(0,0,10,20)
CreateMaterial(#terre, LoadTexture(#terre, "terre_map.jpg"))
CreateSphere(#terre,20,50,50)
CreateEntity(#terre,MeshID(0),#PB_Material_None)
CreateEntity(#terre,MeshID(0),MaterialID(0))
LoadImage(100,"media/font.bmp") ; Charge l'image de toutes les lettres
vaisseau_posx=480
vaisseau_posy=700
;----------------fonte cooldj--------------------------------
For j=0 To 125-33 ; Fait une boucle de toutes les lettres
GrabImage(100,j,j*16,0,j*16+16,16) ; Découpe lettre par lettre
CreateSprite(j+100,16,16) ; Crée un sprite pour chaque lettre
StartDrawing(SpriteOutput(j+100))
DrawImage(ImageID(j),0,0) ; Place la lettre découpée dans le sprite
StopDrawing()
Next
;-------------------------------------------------------
Repeat
ExamineKeyboard()
ClearScreen(RGB(0,0,0))
SpriteQuality(1)
RotateEntity(0,0.3,0,0,#PB_Relative)
RenderWorld()
;--- fps ----
If FPST < ElapsedMilliseconds()
FPST = ElapsedMilliseconds()+1000
fps = FPSC
FPSC=0
EndIf
FPSC+1
Transpa+1:If Transpa=255:Transpa=0:EndIf
AffText("Fps: "+Str(fps),0,30,255)
AffText("Start Game",420,420,255)
AffText("Menu ",460,460,255)
AffText("Credits ",440,500,255)
DisplayTransparentSprite(#titre,-10,200,transpa) ;affiche le titre en transparence+transpa de 255 à 0
If image_vaisseau=3:image_vaisseau=0:EndIf
TransparentSpriteColor(#vaisseau,RGB(0,0,0)) ;affiche le vaisseau sans le fond noir
ClipSprite(#vaisseau,image_vaisseau*60,0,60,60) ;clip l'image
DisplayTransparentSprite(#vaisseau,vaisseau_posx,vaisseau_posy);affiche le vaisseau avec sa position sur l'ecran
; pas animation
tempo_vaisseau + 1
If tempo_vaisseau= 3
image_vaisseau +1
tempo_vaisseau = -1
EndIf
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
;-------Procédure Cooldj-------------------
Procedure AffText(Text$,x.i,y.i,light.i)
For j=1 To Len(Text$) ; Fait une boucle sur le nombre de caractères à afficher
a$=Mid(Text$,j,1) ; Prends un caractère après l'autre
If (Asc(a$)>=Asc("!")) And (Asc(a$)<=Asc("z")) ; vérifie que le caractère existe
i.i=Asc(a$)-33 ; rappel : le code Ascii de ! est 33
DisplayTransparentSprite(i+100,x+j*16,y,light) ; Affiche le sprite du caractere
EndIf
Next
EndProcedure
;------------------------------------------
FreeEntity(#terre)
FreeTexture(#terre)
FreeSprite(#vaisseau)
FreeSprite(#titre)
CloseScreen()
End
DataSection
vaisseau:
IncludeBinary "media\fighter.bmp"
titre:
IncludeBinary "media\space.png"
EndDataSection
; Epb