Je suis toujours aussi nul : 925 points à la première partie

Tu as juste augmenté la vitessesalut a tous
je me suis permis de modifier la fluidité de ton jeu hakotedelaplaque
http://raven.perso.cegetel.net/Pure1945.rar
ne le prend pas mal , je dis pas cela pour te vexer --- une simple setrefreshrate suffit à le rendre lisse .quand je lis le "c'est une insulte au pure" j'ai du mal à digérer
en emulation avec MAME32 peut etre , mais le vrai 1941 en borne arcade etait fluidesi le jeu n'est pas fluide c'est parce que c'est une COPIE DE L'ORGINAL qui est comme ça
Code : Tout sélectionner
If MessageRequester("Config", "Jouer en Mode plein Ecran ?", #PB_MessageRequester_YesNo) = 6
SetRefreshRate(60)
OpenScreen(640, 480, 32, "Pure1945")
Else
OpenWindow(#PB_Any, 0, 0, 640, 480, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Pure1945")
OpenWindowedScreen(WindowID(), 0, 0, 640, 480, 0, 0, 0)
SetFrameRate(60)
EndIf
J'ai lu , et utilisé cet article récemment ,maintenant j'adopte ce principe dans tous mes codes.Le temps
La gestion du temps est un aspect beaucoup plus complexe qu'il n'y parait. C'est en effet à la charge du programmeur de gérer le "World Stepping" : l'avancée du temps dans le monde. Il faut, à chaque image, expliquer au moteur physique de combien d'unités de temps il doit avancer les objets. Et là, ça se complique...
La première idée qui vient, c'est de mesurer le temps de rendu de la dernière frame et d'avancer le temps d'autant. Par exemple, si on a un rendu à 100FPS, la dernière frame durera 10ms et il faudra faire avancer le temps de 0.01s. Si on a un rendu de 10FPS (une frame toutes les 100ms), on avancera de 0.1 seconde. Malheureusement, cette méthode ne fonctionne pas :
Avancer le temps de une unité de 0.1s n'est pas du tout la même chose que d'avancer le temps de dix unités de 0.01s chacune. En effet, la détection de collision n'est effectuée qu'une fois pour l'ensemble d'une incrémenation du temps, quelle soit de 10ms ou de 100ms. Les collisions seraient donc dix fois moins précises lorsque le jeu tourne à 10 FPS qu'à 100 FPS. En fonction de votre nombre de FPS, les balles vont traverser les murs ou non : si la détection de collision est précise, la collision balle-mur va être détectée alors que si le jeu rame, elle ne le sera pas. Les balles sont très sensibles à ce genre de problèmes car ce sont des objets TRES véloces et aussi très petits. Bref, ça ne peut pas fonctionner.
L'astuce consiste à choisir un "timestep" fixe et à répeter l'avancée du temps autant de fois qu'il le faut entre chaque frame. Fixons par exemple le timestep 0,01s. Si le jeu tourne à 100 FPS, il affiche une image toutes les 0,01s donc entre chaque image il suffit de faire avancer le temps d'une unité (un step). Si le jeu ralenti à 10 FPS et qu'il ne calcule plus qu'une image toutes les 0.1s, il faudra par contre faire avancer le temps de 10 steps entre deux images.
On arrive alors à un système logique : l'avancée du temps est synchronisée sur le temps réel. Dans notre exemple, on simulera les physiques à un fréquence de 100 Hz quelque soit le framerate du jeu. Il est bien sur possible de changer cette fréquence pour créer des effets de ralentis ou geler le jeu pendant un moment.
j'ai juste remplacer setframerate par SetRefreshRatefilperj a écrit :Tu as juste augmenté la vitessesalut a tous
je me suis permis de modifier la fluidité de ton jeu hakotedelaplaque
http://raven.perso.cegetel.net/Pure1945.rar
bé non !si j'enlève la synchro de mon écran , ton jeu s'emballe et devient injouable
Code : Tout sélectionner
SetRefreshRate(75)
If OpenScreen(1024,768,32,"") = 0 :SetRefreshRate(0): OpenScreen(1024,768,16,"") :SetFrameRate(75):EndIf
Effectivement ce bout de code date d'un an et ces commandes etaient en fait des dll , une pour le wait vbl et l'autre pour retourner la valeur de la sync .il me manque deux trucs WaitForVSync() et GetMonitorFreq()
normalement avec :tu devrais afficher le FPS sur ton puckman , je te dirais à combien je monte , sûrement plus que 75
Code : Tout sélectionner
SetRefreshRate(75)
If OpenScreen(1024,768,32,"") = 0 :SetRefreshRate(0): OpenScreen(1024,768,16,"") :SetFrameRate(75):EndIf
En plein ecran Oui bien sur , mais sous windows simplement depuis la version 3.91 ou 3.92 sais plus .FlipBuffer() attendant la synchro de l'écran