j'ai un FPS de 60 ( la fréquence de mon écran )
En mettant FullScreen = 0
J'ai un FPS de 450 .
J'ai essayé en mettant SetFrameRate(30) , et j'obtiens bien un FPS De 30 avec FullScreen = 1 , et ça n'a aucun effet avec FullScreen = 0 ( j'ai toujours 450).
Code : Tout sélectionner
;Mettre cette valeur à 0 pour passer en mode fenêtré
FullScreen = 1
ScreenWidth = GetSystemMetrics_(#sm_cxscreen)
ScreenHeight = GetSystemMetrics_(#sm_cyscreen)
#ScreenDepth = 16
If InitEngine3D() = 0
MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 )
End
ElseIf InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
End
EndIf
If FullScreen
If OpenScreen( ScreenWidth , ScreenHeight , #ScreenDepth , "Sokoban3D" ) = 0
MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
End
EndIf
Else
If OpenWindow(0,0,0,ScreenWidth,ScreenHeight,#PB_Window_BorderLess,"Demo3D") = 0
MessageRequester( "Erreur", "Impossible d'ouvrir la fenêtre")
End
EndIf
If OpenWindowedScreen( WindowID(0), 0, 0, ScreenWidth , ScreenHeight , 0, 0, 0 ) = 0
MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
End
EndIf
EndIf
;-Declare procedures
Declare.f WrapValue( Angle.f )
Structure Parametres
AngleX.f
EndStructure
Dim entity.Parametres(5)
;- Variables globales
Global Pas.f
;-Mesh
CreateMesh(0) ; Cube
SetMeshData(0, 0, ?CubePoints , 16)
SetMeshData(0, 1, ?CubeTriangles , 12)
SetMeshData(0, 2, ?CubeTextures , 16)
;- Textures
CreateTexture(2,128,128)
StartDrawing(TextureOutput(2))
Box(0,0,128,128,RGB(255,255,255))
Box(2,2,124,124,RGB(0,0,200))
StopDrawing()
CreateTexture(3,128,128)
StartDrawing(TextureOutput(3))
Box(0,0,128,128,RGB(255,255,255))
Box(2,2,124,124,RGB(0,200,0))
For a = 0 To 128 Step 4
For b = 0 To 128 Step 4
Circle(a,b,2,RGB(10,150,10))
Next b
Next a
StopDrawing()
;- Material
For a = 2 To 3
CreateMaterial(a, TextureID( a ))
Next a
;-Entity
Restore Entitys
For a = 0 To 1
Read materialID.l : Read Type.l
Read Longueur.f : Read Hauteur.f : Read Largeur.f
Read X.f : Read Y.f : Read Z.f
Read AngleX.f
CreateEntity(a , MeshID(0) ,MaterialID(materialID))
ScaleEntity(a , Longueur , Hauteur , Largeur )
EntityLocate(a,X,Y,Z)
entity(a)\AngleX = AngleX
RotateEntity(a,entity(a)\AngleX,0,0)
Next a
;- Camera
CreateCamera(0, 0, 0 , 100 , 100)
CameraLocate(0,0,0,20)
AmbientColor(RGB(255,255,255))
;- Procédures
Procedure.f WrapValue(Angle.f)
Angle/360
Angle-Int(Angle)
If Angle<0
ProcedureReturn (Angle+1)*360
Else
ProcedureReturn Angle*360
EndIf
EndProcedure
Procedure.f NewXValue( X.f , Angle.f , NbUnite.f )
;r utiliser conjointement avec NewZvalue pour calculer une position de <NbUnite> dans la direction <angle>
Valeur.f = X + Cos( Angle * 0.0174533) * NbUnite
ProcedureReturn Valeur
EndProcedure
Procedure.f NewZValue( Z.f , Angle.f , NbUnite.f )
;r utiliser conjointement avec NewXvalue pour calculer une position de <NbUnite> dans la direction <angle>
Valeur.f = Z - Sin( Angle * 0.0174533) * NbUnite
ProcedureReturn Valeur
EndProcedure
Procedure GestionCamera()
PosXCamera.f = NewXValue(EntityX(0) , entity(0)\AngleX + 180 , 65)
PosYCamera.f = EntityY(0) + 25
PosZCamera.f = NewZValue(EntityZ(0) , entity(0)\AngleX + 180 , 65)
CameraLocate(0 , PosXCamera , PosYCamera , PosZCamera)
CameraLookAt(0 , EntityX(0) , EntityY(0) , EntityZ(0))
EndProcedure
Procedure AffAide()
StartDrawing(ScreenOutput())
Locate(10,10)
DrawText("Nombre d'images par seconde = " + StrF(Engine3DFrameRate(#PB_Engine3D_Current)))
StopDrawing()
EndProcedure
;- Boucle principale
Repeat
ClearScreen(0, 0, 0)
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
entity(0)\AngleX = WrapValue( entity(0)\AngleX + 1 )
RotateEntity(0,1 , 0, 0 )
ElseIf KeyboardPushed(#PB_Key_Right)
entity(0)\AngleX = WrapValue( entity(0)\AngleX - 1 )
RotateEntity(0, -1 , 0, 0 )
EndIf
If KeyboardPushed(#PB_Key_Up)
Pas = 2
ElseIf KeyboardPushed(#PB_Key_Down)
Pas = -2
Else
Pas = 0
EndIf
EndIf
;Bouge le perso
MoveEntity( 0 , Cos( entity(0)\AngleX * 0.0174533) * Pas , 0, -Sin( entity(0)\AngleX * 0.0174533) * Pas )
; Gestion de la caméra
GestionCamera()
RenderWorld()
AffAide()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
;-Datas du Cube
DataSection
Entitys:
; le perso
Data.l 2,1 ; matérial
Data.f 6,6,6 ; Dimension longueur , hauteur , largeur
Data.f 200,7,200,0 ; positions X,Y,Z et angle
; le sol
Data.l 3,0 ; matérial
Data.f 1000,8,1000 ; Dimension longueur , hauteur , largeur
Data.f 500,0,500,0 ; positions X,Y,Z et angle
CubePoints:
Data.f -0.5,-0.5,-0.5
Data.f -0.5,-0.5,0.5
Data.f 0.5,-0.5,0.5
Data.f 0.5,-0.5,-0.5
Data.f -0.5,0.5,-0.5
Data.f -0.5,0.5,0.5
Data.f 0.5,0.5,0.5
Data.f 0.5,0.5,-0.5
Data.f -0.5,-0.5,-0.5
Data.f -0.5,-0.5,0.5
Data.f 0.5,-0.5,0.5
Data.f 0.5,-0.5,-0.5
Data.f -0.5,0.5,-0.5
Data.f -0.5,0.5,0.5
Data.f 0.5,0.5,0.5
Data.f 0.5,0.5,-0.5
CubeTriangles:
Data.w 0,4,7
Data.w 0,7,3
Data.w 1,5,4
Data.w 1,4,0
Data.w 2,6,5
Data.w 2,5,1
Data.w 3,7,6
Data.w 3,6,2
Data.w 9,8,11
Data.w 9,11,10
Data.w 12,13,14
Data.w 12,14,15
CubeTextures:
Data.f 0,1
Data.f 1,1
Data.f 0,1
Data.f 1,1
Data.f 0,0
Data.f 1,0
Data.f 0,0
Data.f 1,0
Data.f 0,0
Data.f 1,0
Data.f 1,1
Data.f 0,1
Data.f 0,0
Data.f 1,0
Data.f 1,1
Data.f 0,1
EndDataSection