my FPS by Serge Adjo28th May 2009 13:29
|
---|
Summary this code is a very good FPS. 'my FPS' is in WIP so many features and functions aren't there ; use what you find useful: controls with mouse + arrowkey, .dbo level fully textured e Description this code is a very good FPS. 'my FPS' is in WIP so many features and functions aren't there ; use what you find useful: controls with mouse + arrowkey, .dbo level fully textured etc... Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com REM * Titre : programmer1 REM * Auteur : programmeur prog' REM * Date : 01/ 06/ 2009 REM ; REM ################################################################################### REM |PROG PRINCIPAL "_prog.dba" ; "_prog-PRO.dbpro"///////////////////////////////////| REM ################################################################################### # IF FILE EXIST("util.txt")=1 THEN f_Util() // f_Util() REM Débuter PROGRAMME PRINCIPAL ; déclarer les variables en premier; REM f_Débuter() f_DECLARER_VARIABLES() f_INITIALISER() f_INTRO() f_MENU() f_PREPARE_SCENE() REM f_NETTOYER() REM f_QUITTER() JOUER_LA_SCENE_Zgot: REM BOUCLE //////////////////////// DO SET CURSOR 0,0 PRINT V_Joueur_X_# PRINT V_Joueur_Y_# PRINT V_Joueur_Z_# // PRINT T_CARTE_E(1) // CONTROL CAMERA USING ARROWKEYS 0,0.1,1 f_CONTROLES() POSITION MOUSE SCREEN WIDTH()/2,SCREEN HEIGHT()/2 SYNC LOOP REM ___ F I N ____///////////////// FINIR_TOUT: END Rem ***** Included Source File ***** REM * Titre : programmer1 REM * Auteur : programmeur prog' REM * Date : 01/ 06/ 2009 REM ; REM ################################################################################### REM |***** Included Source File ***** "_prog.dba" ; "_prog-PRO.dbpro"///////////////////////////////////| REM ################################################################################### # REM /////// CONTROLES ///////////// FUNCTION f_CONTROLES() REM AVANT / ARRIERE IF UPKEY()=1 THEN INC V_Avance_#,0.1 ELSE V_Avance_#= 0 IF DOWNKEY()=1 THEN INC V_Recul_#,0.1 ELSE V_Recul_#= 0 IF V_Avance_# > V_Recul_# IF V_Recul_#>0 THEN DEC V_Recul_#, 0.1 ENDIF IF V_Avance_# < V_Recul_# IF V_Avance_#>0 THEN DEC V_Avance_#, 0.1 ENDIF REM DROITE / GAUCHE IF RIGHTKEY()=1 THEN INC V_Droite_#,0.1 ELSE V_Droite_#= 0 IF LEFTKEY()=1 THEN INC V_Gauche_#,0.1 ELSE V_Gauche_#= 0 IF V_Droite_# > V_Gauche_# IF V_Gauche_#>0 THEN DEC V_Gauche_#, 0.1 ENDIF IF V_Droite_# < V_Gauche_# IF V_Droite_#>0 THEN DEC V_Droite_#, 0.1 ENDIF REM Enregistre coordonnées joueur axe xyz V_OldJoueur_X_# = CAMERA POSITION X() V_OldJoueur_Y_# = CAMERA POSITION Y() V_OldJoueur_Z_# = CAMERA POSITION Z() V_OldCameraY_# = V_CameraY_# V_OldCameraX_# = V_CameraX_# REM CAMERA / SOURIS V_CameraY_# = WrapValue(V_CameraY_#+MousemoveX()*V_Camera_Vitesse_#) V_CameraX_# = WrapValue(V_CameraX_#+MousemoveY()*V_Camera_Vitesse_#) V_CameraZ_# = Camera angle Z() Rem Control pour camera IF V_Avance_#>0 AND V_Gauche_#=0 AND V_Droite_#=0 MOVE CAMERA V_Joueur_Vitesse_# V_Joueur_X_# = CAMERA POSITION X() V_Joueur_Y_# = CAMERA POSITION Y() V_Joueur_Z_# = CAMERA POSITION Z() ENDIF IF V_Recul_#>0 AND V_Gauche_#=0 AND V_Droite_#=0 MOVE CAMERA 0-V_Joueur_Vitesse_# V_Joueur_X_# = CAMERA POSITION X() V_Joueur_Y_# = CAMERA POSITION Y() V_Joueur_Z_# = CAMERA POSITION Z() ENDIF IF V_Gauche_#>0 AND V_Avance_#=0 AND V_Recul_#=0 V_Joueur_X_# = Newxvalue(V_Joueur_X_#,Wrapvalue(V_CameraY_#-90),V_Joueur_Vitesse_#) V_Joueur_Z_# = Newzvalue(V_Joueur_Z_#,Wrapvalue(V_CameraY_#-90),V_Joueur_Vitesse_#) ENDIF IF V_Droite_#>0 AND V_Avance_#=0 AND V_Recul_#=0 V_Joueur_X_# = Newxvalue(V_Joueur_X_#,Wrapvalue(V_CameraY_#+90),V_Joueur_Vitesse_#) V_Joueur_Z_# = Newzvalue(V_Joueur_Z_#,Wrapvalue(V_CameraY_#+90),V_Joueur_Vitesse_#) ENDIF REM DIAGONALES: AVANCER. IF V_Gauche_#>0 AND V_Avance_#>0 YROTATE CAMERA CAMERA ANGLE Y()-45 MOVE CAMERA V_Joueur_Vitesse_# V_Joueur_X_# = CAMERA POSITION X() V_Joueur_Y_# = CAMERA POSITION Y() V_Joueur_Z_# = CAMERA POSITION Z() ENDIF IF V_Droite_#>0 AND V_Avance_#>0 YROTATE CAMERA CAMERA ANGLE Y()+45 MOVE CAMERA V_Joueur_Vitesse_# V_Joueur_X_# = CAMERA POSITION X() V_Joueur_Y_# = CAMERA POSITION Y() V_Joueur_Z_# = CAMERA POSITION Z() ENDIF REM DIAGONALES: RECULER. IF V_Gauche_#>0 AND V_Recul_#>0 AND V_Avance_#=0 YROTATE CAMERA CAMERA ANGLE Y()+45 MOVE CAMERA 0-V_Joueur_Vitesse_# V_Joueur_X_# = CAMERA POSITION X() V_Joueur_Y_# = CAMERA POSITION Y() V_Joueur_Z_# = CAMERA POSITION Z() ENDIF IF V_Droite_#>0 AND V_Recul_#>0 AND V_Avance_#=0 YROTATE CAMERA CAMERA ANGLE Y()-45 MOVE CAMERA 0-V_Joueur_Vitesse_# V_Joueur_X_# = CAMERA POSITION X() V_Joueur_Y_# = CAMERA POSITION Y() V_Joueur_Z_# = CAMERA POSITION Z() ENDIF Rem Tourne camera // V_CameraTest_X_#=WrapValue(V_CameraX_#-180) // if V_CameraTest_X_# > 225 then V_CameraX_#=45 // if V_CameraTest_X_# < 135 then V_CameraX_#=315 V_CameraTest_X_#=WrapValue(V_CameraX_#-180) if V_CameraTest_X_# > 270 then V_CameraX_#=90 if V_CameraTest_X_# < 90 then V_CameraX_#=270 YRotate camera CurveAngle(V_CameraY_#,V_OldCameraY_#,24) XRotate camera CurveAngle(V_CameraX_#,V_OldCameraX_#,24) Rem REPositionne Camera // V_Joueur_Y_# = Get ground height(1,V_Joueur_X_#,V_Joueur_Z_#)+35 Position Camera V_Joueur_X_#,V_Joueur_Y_#,V_Joueur_Z_# f_CollisionGlissante(V_OldJoueur_X_#,V_OldJoueur_Y_#,V_OldJoueur_Z_#,V_Joueur_X_#,V_Joueur_Y_#,V_Joueur_Z_#,V_TailleJoueur_#,V_Niveau_E) Rem Position Listener Position Listener V_Joueur_X_#,V_Joueur_Y_#,V_Joueur_Z_# Rotate Listener 0,V_CameraY_#,0 ENDFUNCTION REM /////// COLLISION GLISSANTE ///////////// FUNCTION f_CollisionGlissante(X1#,Y1#,Z1#,X2#,Y2#,Z2#,Radius#,Obj) C = sc_SphereSlide(Obj,X1#,Y1#,Z1#,X2#,Y2#,Z2#,Radius#,0) IF C > 0 V_Joueur_X_# = sc_getCollisionSlideX() V_Joueur_Y_# = sc_getCollisionSlideY() V_Joueur_Z_# = sc_getCollisionSlideZ() POSITION CAMERA V_Joueur_X_#, V_Joueur_Y_#, V_Joueur_Z_# Position Listener V_Joueur_X_#, V_Joueur_Y_#, V_Joueur_Z_# Rotate Listener 0,V_CameraY_#,0 ENDIF REM Sliding Collision with Sparky's Collision dll REM By RUCCUS ----- Email/MSN: Ask-RUCCUS@hotmail.com ENDFUNCTION REM ////// INITIER ///////////////// FUNCTION f_DECLARER_VARIABLES() GLOBAL V_Joueur_# : V_Joueur_#= 200 GLOBAL V_TailleJoueur_# : V_TailleJoueur_#=2 GLOBAL V_OldJoueur_X_# : V_OldJoueur_X_#= 5 GLOBAL V_OldJoueur_Y_# : V_OldJoueur_Y_#= 3 GLOBAL V_OldJoueur_Z_# : V_OldJoueur_Z_#= 4 GLOBAL V_Joueur_X_# : V_Joueur_X_#= V_OldJoueur_X_# GLOBAL V_Joueur_Y_# : V_Joueur_Y_#= V_OldJoueur_Y_# GLOBAL V_Joueur_Z_# : V_Joueur_Z_#= V_OldJoueur_Z_# GLOBAL V_Joueur_Vitesse_# : V_Joueur_Vitesse_#= 0.1 GLOBAL V_Camera_Vitesse_# : V_Camera_Vitesse_#= 0.2 GLOBAL V_Avance_# : V_Avance_#= 0 GLOBAL V_Droite_# : V_Droite_#= 0 GLOBAL V_Recul_# : V_Recul_#= 0 GLOBAL V_Gauche_# : V_Gauche_#= 0 GLOBAL V_OldCameraY_# GLOBAL V_OldCameraX_# GLOBAL V_CameraY_# GLOBAL V_CameraX_# GLOBAL V_CameraTest_X_# REM VARIABLE D'USAGE ET DE LECTURE GLOBAL V_LECTURE1_# : GLOBAL V_LECTURE2_# : GLOBAL V_LECTURE3_# // GLOBAL V_COL_E // GLOBAL V_LIN_E REM CHEMINS ET NOM$ GLOBAL V_Niveau_E : V_Niveau_E = 100 GLOBAL V_Niveau_JEU_$ : V_Niveau_JEU_$ = "1" ENDFUNCTION FUNCTION f_Débuter() ENDFUNCTION ` ***µµµµµµµµµµµ******* REM /////// FUNCTION f_NETTOYER() ENDFUNCTION FUNCTION f_QUITTER() ENDFUNCTION FUNCTION f_INITIALISER() AUTOCAM OFF : SYNC ON : SYNC RATE 60 SET DISPLAY MODE 1024,768,32,1 AI START ENDFUNCTION FUNCTION f_INTRO() ENDFUNCTION FUNCTION f_MENU() ENDFUNCTION REM ///////////////////////////////// Rem ***** Included Source File ***** REM * Titre : programmer1 REM * Auteur : programmeur prog' REM * Date : 01/ 06/ 2009 REM ; REM ################################################################################### REM |***** Included Source File ***** "_prog.dba" ; "_prog-PRO.dbpro"///////////////////////////////////| REM ################################################################################### # REM /////// SCENE ////////////////// FUNCTION f_PREPARE_SCENE() SET DIR "BIN32" : SET DIR V_Niveau_JEU_$ IF FILE EXIST(V_Niveau_JEU_$+".dbo") = 0 LOAD OBJECT V_Niveau_JEU_$+".x",V_Niveau_E : SAVE OBJECT V_Niveau_JEU_$+".dbo",V_Niveau_E : DELETE OBJECT V_Niveau_E : LOAD OBJECT V_Niveau_JEU_$+".dbo",V_Niveau_E ELSE LOAD OBJECT V_Niveau_JEU_$+".dbo",V_Niveau_E ENDIF REM Met le niveau dans le groupe 0 avec collision complexe polygone (type 0) 2 facesPerNode SC_SETUPCOMPLEXOBJECT V_Niveau_E,0,2 : SC_allowObjectScaling V_Niveau_E : SCALE OBJECT V_Niveau_E,100,100,100 : SC_updateObject V_Niveau_E REM CHARGER 3 NIVEAUX.... POSITION CAMERA V_Joueur_X_#,V_Joueur_Y_#,V_Joueur_Z_# AI ADD OBSTACLE FROM LEVEL V_Niveau_E,0,0.1,0,0 AI DEBUG SHOW OBSTACLE BOUNDS 0, 0.1 ENDFUNCTION REM ////////// UTILITAIRES //////////// FUNCTION f_Util() // LOAD BITMAP "CARTEB.BMP",1 : SET CURRENT BITMAP 1 : LOCK PIXELS : V_LECTURE1_#=BITMAP WIDTH(1) : V_LECTURE2_#=BITMAP HEIGHT(1) LOAD BITMAP "CARTEA.BMP",1 : SET CURRENT BITMAP 1 : V_LECTURE1_#=BITMAP WIDTH(1) : V_LECTURE2_#=BITMAP HEIGHT(1) GLOBAL DIM T_CARTEA_E(V_LECTURE1_#,V_LECTURE2_#) LOCK PIXELS FOR V_COL_E=0 TO V_LECTURE1_# FOR V_LIN_E=0 TO V_LECTURE2_# T_CARTEA_E(V_COL_E,V_LIN_E)=RGBR(POINT(V_COL_E,V_LIN_E)) NEXT V_LIN_E NEXT V_COL_E FOR V_COL_E=0 TO V_LECTURE1_# FOR V_LIN_E=0 TO V_LECTURE2_# SET CURRENT BITMAP 1 : RED=T_CARTEA_E(V_COL_E,V_LIN_E) : DOT V_COL_E,V_LIN_E,RGB(RED,0,0) NEXT V_LIN_E NEXT V_COL_E UNLOCK PIXELS GET IMAGE 1,0,0,V_LECTURE1_#,V_LECTURE2_#,3 SAVE IMAGE "A.BMP",1 SYNC ON SYNC RATE 60 SET DISPLAY MODE 1024,768,32,1 DO SET CURSOR 0,0 PRINT T_CARTEA_E(5,3) PRINT T_CARTEA_E(5,4) PRINT T_CARTEA_E(5,5) // COPY BITMAP 0,1 SYNC LOOP END ENDFUNCTION REM |