Snelle tip problemen met V-Sync (Tearing) in Flash oplossen

In de (zeer) snelle tip van vandaag leer je hoe je het veelvoorkomende probleem van flikkeren of scheuren kunt oplossen. Dit is een vreselijk effect in Flash, waar bitmaps flikkeren wanneer ze worden bijgewerkt of lijken te scheuren in twee afbeeldingen (zoals in de miniatuur).


Wat zijn de oorzaken van deze problemen?

In een notendop: scheuren treedt op wanneer Flash tegelijkertijd informatie uit twee verschillende kaders naar het scherm trekt. In de miniatuurafbeelding hierboven kunt u zien hoe dit eruit zou kunnen zien bij het pannen over een afbeelding van een toren; het onderste gedeelte van de afbeelding is van één frame, terwijl de bovenste helft van de volgende is. Als je dit in beweging ziet, zou je het slechts een fractie van een seconde tegelijk zien, maar het zou nog steeds merkbaar zijn.

Dit wordt vaak opgelost met behulp van "V-sync" (verticale synchronisatie), waardoor de videokaart niets meer naar het scherm kan trekken tot de volgende vernieuwingscyclus van het scherm. Flash heeft echter echt slechte ondersteuning voor V-sync, omdat de framesnelheid van Flash Player anders is dan de verticale vernieuwingsfrequentie van de desktop, wat betekent dat objecten die veel hoogte hebben, hard worden geraakt door scheuren. Dit is waar, zelfs als de framesnelheid van Flash gelijk is aan de verticale verversingssnelheid van de desktop, omdat ze nog steeds niet zijn gesynchroniseerd.

Nu vraag je je misschien af: waarom lost Adobe dit probleem niet op? De reden is dat Flash een tijdlijn gebruikt en dat het wijzigen van de framesnelheid bijgevolg de afspeelsnelheid verandert. Als je een spel of afbeeldingengalerij met 60 frames per seconde hebt gemaakt en de verticale verversingsfrequentie op het bureaublad meer dan 60 frames per seconde was, zou je ietwat stotteren (als je de film met 60 fps verliet), of zou je de film moeten spelen. film sneller terug om te synchroniseren met de desktop. Voor de meeste inhoud zou dit helemaal niet worden aanbevolen!

Dit is een probleem dat ontwikkelaars van games wilden dat Adobe het lang goedmaakte, maar het is duidelijk dat er problemen zijn met hen om dit te doen. Dus, op dit moment moeten ontwikkelaars creatieve manieren verzinnen om dit probleem zelf op te lossen. Er is geen eenvoudige manier om het op alle computers te repareren, maar aangezien de meeste monitoren een vernieuwingsfrequentie van 59,9 of 60 hebben, kunt u de framesnelheid instellen op 60 om deze voor de meeste gebruikers op te lossen. Dit vereist echter meer verwerkingskracht en kan uw toepassing vertragen.

De beste manier om dit op dit moment op te lossen is vrij eenvoudig en gemakkelijk te doen. Het lost de onderliggende oorzaak niet op, maar het helpt de hoeveelheid scheuren zoveel mogelijk te verminderen.


Hoe kan ik scheuren verminderen?

Hardwareversnelling Niveau 1: Direct is de sleutel tot het helpen van het scheurprobleem. Dit kan worden ingesteld door het HTML-bestand te openen waar uw SWF is ingesloten en de parameters voor het Flash-object te bewerken.

De vlag die u wilt instellen is wmode: "direct". Deze regel staat in de sectie 'params' van uw HTML-code. Dat is het, dat zou het scheuren drastisch helpen verminderen. Als je wilt weten waarom, kijk dan op de pagina van Adobe over hardwareversnelling. Het verklaart een beetje over beide niveaus van hardwareversnelling. Raadpleeg voor meer informatie dit diepgaande artikel.


Nog iets anders?

Ja; een ander ding om op te noemen is dat hoe meer voorwerpen je op het scherm hebt, hoe meer voor de hand liggend het scheuren zal worden. Kleinere items worden meestal niet beïnvloed door V-sync-problemen, maar items op het scherm die groot zijn, maken het erg duidelijk, dus het aantal grote objecten tot een minimum beperken is een goed idee.

Ook gebruiken bitmapData.lock () en bitmapData.unlock () wordt aanbevolen en heeft enkele mensen met dit probleem geholpen. Als u een BitmapData-object vergrendelt, worden bitmaps niet opnieuw getekend totdat deze ontgrendeld zijn. Dit is een goed idee als u meerdere wijzigingen tussen frames wilt aanbrengen. Bekijk deze blogpost voor meer informatie.


Conclusie

Je kunt een paar dingen doen om het scheuren te verminderen, maar je kunt het niet volledig elimineren. Het aantal grote objecten verminderen, instellen wmode: "direct" en het gebruik van bitmapvergrendeling zijn de beste manieren om scheuren te helpen verminderen.