9 votes

pourquoi seulement 60 fps est vraiment fluide dans cocos2d ?

Cette question a probablement déjà été posée, mais je ne la trouve nulle part...

En vidéo, 24 fps et tout ce qui est supérieur est fluide. Cocos2d semble être lisse que lorsque c'est 60 fps ou peut-être un peu moins. Tout ce qui se situe entre 30 et 50 n'est certainement pas fluide, le compteur de fps ne semble pas précis...

Pourquoi cela ? Ou est-ce que je suis le seul à être dans cette situation ?

25voto

LearnCocos2D Points 43044

Il y a en fait plusieurs raisons pour ce comportement, et ce n'est pas seulement cocos2d mais un effet vu dans n'importe quel moteur de jeu dans les environnements avec des synchronisation verticale (VSYNC) activé. Sur iOS, le VSYNC est toujours activé. Sur les PC, vous avez généralement la possibilité de le désactiver pour améliorer les taux de rafraîchissement s'ils sont constamment inférieurs à ceux du moniteur, au prix de déchirure de l'écran . En général, les écrans LCD comme ceux des appareils iOS actualisent leur affichage à 60 Hz, ce qui permet un maximum de 60 images par seconde.

Cocos2D 1.x utilise par défaut l'option CADisplayLink pour les mises à jour, Cocos2D 2.x utilise exclusivement CADisplayLink. CADisplayLink fait en sorte que les mises à jour soient synchronisées avec le taux de rafraîchissement de l'écran. Cela signifie qu'une notification est envoyée lorsque l'écran a fini de dessiner son contenu.

Lorsque vous obtenez 60 fps, tout va bien. Mais si le jeu ne parvient pas à rendre une image à temps pour obtenir 60 fps, il ne recevra sa prochaine mise à jour qu'après le prochain rafraîchissement de l'écran. Cela divise effectivement le framerate par deux dès que le framerate tombe juste en dessous de 60 fps - ou en d'autres termes dès que votre cycle de mise à jour et de rendu prend plus de 16,666 millisecondes pour se terminer. Cela signifie que vous ne pouvez avoir des fréquences d'images discrètes de 60, 30, 20 et 15 fps (60 divisé par 1, 2, 3 et 4) sur iOS avec les mises à jour CADisplayLink.

L'effet est tout à fait perceptible, car un taux de rafraîchissement qui fluctue entre 60, 30, 20 et 15 fps - même pendant une fraction de seconde - n'est pas fluide, principalement parce qu'il est très instable - c'est cette instabilité que nous percevons comme "non fluide". Si votre jeu est affecté par ce phénomène, vous constaterez qu'en limitant le taux de rafraîchissement à 30 images par seconde, le jeu paraîtra plus fluide. Vous aurez également plus de temps pour mettre à jour et rendre les éléments entre les images.

C'est la constance de la fréquence d'images de 24 images par seconde qui est considérée comme "fluide", mais les réalisateurs ont également appris à éviter les scènes où la fréquence d'images limitée devient trop évidente. Par exemple, ils évitent à tout prix ce que les jeux font très souvent : le défilement latéral, c'est-à-dire les mouvements latéraux de la caméra ou les mouvements latéraux des objets passant devant la caméra.

Vous serez surpris de constater à quel point les films peuvent être plus fluides lorsque vous regardez Le Hobbit. Il s'agit du premier film à succès à fonctionner à 48 images par seconde. Vous remarquerez immédiatement à quel point les personnages du film sont plus "réels" et plus "vrais". Pour vous faire une idée, regardez cette vidéo Bande-annonce non officielle du Hobbit à 48 fps .

Ce que cocos2d affiche comme fps n'est pas une représentation précise du passage de 60 à 30 à 20 et 15 fps mais le framerate moyen sur plusieurs images. Par conséquent, lorsque cocos2d affiche "45 fps", cela signifie que la moitié du temps le jeu a affiché 30 fps, l'autre moitié à 60 fps sur les dernières images.

2voto

JasonD Points 10471

Deux problèmes principaux.

La première chose à faire est de s'adapter à la fréquence de rafraîchissement de l'écran. Sinon, vous obtiendrez des mouvements irréguliers que l'œil/le cerveau est capable de repérer. Il faut au moins en faire un multiple.

Le deuxième est le flou de mouvement. Les films/vidéos ont tendance à avoir un flou de mouvement, ce qui trompe le spectateur en lui faisant croire à un mouvement continu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X