Astuce résolution des problèmes liés à V-Sync (Déchirer) dans Flash

Dans le (très) rapide conseil d'aujourd'hui, vous apprendrez à résoudre le problème habituel du scintillement ou de la déchirure. C’est un effet horrible dans Flash où les bitmaps scintillent au fur et à mesure qu’elles sont mises à jour ou semblent se déchirer en deux images (comme dans la vignette).


Quelles sont les causes de ces problèmes?

En un mot: une déchirure se produit lorsque Flash attire simultanément les informations de deux images différentes à l'écran. Dans l'image miniature ci-dessus, vous pouvez voir à quoi cela pourrait ressembler lorsque vous effectuez un panoramique sur une image d'une tour. la partie inférieure de l'image provient d'une image, alors que la moitié supérieure est l'image suivante. Lorsque vous regardez ceci en mouvement, vous ne le verrez que pendant une fraction de seconde à la fois, mais ce serait toujours perceptible..

Ceci est généralement résolu en utilisant "V-sync" (synchronisation verticale), qui empêche la carte vidéo de dessiner quoi que ce soit à l'écran jusqu'au prochain cycle de rafraîchissement de l'écran. Cependant, la prise en charge de V-sync par Flash est vraiment médiocre, car la cadence de Flash Player est différente de la cadence de rafraîchissement verticale du bureau, ce qui signifie que les objets très hauts seront fortement endommagés par la déchirure. Cela est vrai même si la fréquence d'images de Flash est égale à la fréquence d'actualisation verticale du bureau, car elles ne sont toujours pas synchronisées..

Maintenant, vous vous demandez peut-être pourquoi Adobe ne résout pas ce problème. La raison en est que Flash utilise un plan de montage chronologique et que la modification de la fréquence d'images modifie en conséquence la vitesse de lecture. Si vous créez un jeu ou une galerie d’images à 60 images par seconde et que le taux de rafraîchissement vertical du bureau est supérieur à 60 images par seconde, vous risquez un léger bégaiement (si vous quittez le film à 60 images par seconde) ou vous devez lire le retour du film plus rapide pour la synchronisation avec le bureau. Pour la plupart des contenus, cela ne serait pas recommandé du tout!

Il s’agit là d’un problème que les développeurs de jeux souhaitent que Adobe résolve depuis longtemps, mais il est évident qu’ils rencontrent des problèmes. Donc, pour le moment, nous, les développeurs, devons trouver des moyens créatifs de résoudre ce problème nous-mêmes. Il n’existe pas de moyen simple de résoudre ce problème sur tous les ordinateurs, mais comme la plupart des moniteurs ont une fréquence de rafraîchissement de 59,9 ou 60, vous pouvez définir la cadence de prise de vue sur 60 pour que le problème soit résolu par la plupart des utilisateurs. Cependant, cela nécessite plus de puissance de traitement et pourrait ralentir votre application..

La meilleure façon de résoudre ce problème pour le moment est assez simple et facile à faire. Cela ne résout pas la cause sous-jacente, mais aide à réduire autant que possible le nombre de déchirures..


Comment puis-je réduire les déchirures?

Accélération matérielle niveau 1: directe est la clé pour aider le problème de la déchirure. Cela peut être défini en ouvrant le fichier HTML où votre fichier SWF est incorporé et en modifiant les paramètres de l'objet Flash..

Le drapeau que vous souhaitez définir est wmode: "direct". Cette ligne va dans la section 'params' de votre code HTML. Ça devrait aider à réduire considérablement les déchirures. Si vous voulez savoir pourquoi, consultez la page d'Adobe sur l'accélération matérielle. Cela explique un peu les deux niveaux d'accélération matérielle. Pour encore plus d'informations, consultez cet article en profondeur.


Rien d'autre?

Oui; Une autre chose à mentionner est que plus vous avez d'objets à l'écran, plus le déchirement devient évident. Les petits objets ne sont généralement pas affectés par les problèmes de synchronisation V, mais les éléments de grande taille sur l'écran le rendent très évident. Il est donc judicieux de limiter le nombre d'objets de grande taille..

En outre, en utilisant bitmapData.lock () et bitmapData.unlock () est recommandé et a aidé certaines personnes avec ce problème. Le verrouillage d'un objet BitmapData empêche toute redimensionnement des bitmaps jusqu'à son déverrouillage, ce qui est une bonne idée si vous devez effectuer plusieurs modifications entre les images. Pour en savoir plus, consultez ce blog.


Conclusion

Vous pouvez faire quelques choses pour aider à réduire les déchirures mais vous ne pouvez pas l'éliminer complètement. Réduire la quantité d'objets volumineux, régler wmode: "direct" et l'utilisation du verrouillage bitmap sont les meilleurs moyens de réduire les déchirures.