"Super Meat Boy" est un jeu de plateforme difficile récemment sorti sur PC, nécessitant un contrôle exceptionnel et un saut parfait au pixel près. Le code physique du jeu dépend du taux de rafraîchissement, qui est verrouillé à 60 images par seconde; cela signifie que si votre ordinateur ne peut pas exécuter le jeu à pleine vitesse, la physique deviendra folle, entraînant (entre autres) votre personnage à courir plus lentement et à tomber à travers le sol. De plus, si vsync est désactivé, le jeu tourne extrêmement vite.
Les personnes expérimentées dans la programmation de jeux 2D pourraient-elles expliquer pourquoi le jeu a été codé de cette façon? Une boucle physique fonctionnant à vitesse constante ne serait-elle pas une meilleure solution? (En fait, je pense qu'une boucle physique est utilisée pour certaines parties du jeu, car certaines des entités continuent de se déplacer normalement quel que soit le nombre d'images par seconde. Votre personnage, en revanche, fonctionne exactement [fps / 60] aussi vite.)
Ce qui me dérange dans cette implémentation, c'est la perte d'abstraction entre le moteur de jeu et le rendu graphique, qui dépend de choses spécifiques au système comme le moniteur, la carte graphique et le CPU. Si, pour une raison quelconque, votre ordinateur ne peut pas gérer vsync, ou ne peut pas exécuter le jeu à exactement 60 images par seconde, il se cassera de façon spectaculaire. Pourquoi l'étape de rendu devrait-elle influencer de quelque manière que ce soit les calculs physiques? (La plupart des jeux ralentissent le jeu ou sautent les images de nos jours.) D'un autre côté, je comprends que les plates-formes old-school sur la NES et la SNES dépendent d'un framerate fixe pour une grande partie de leur contrôle et de leur physique. Pourquoi est-ce, et serait-il possible de créer un patformer dans cette veine sans avoir la dépendance de framerate? Y a-t-il nécessairement une perte de précision si vous séparez le rendu graphique du reste du moteur?
Merci et désolé si la question était déroutante.