Rask tips Fiksing av V-Sync (Tearing) problemer i Flash

I dagens (veldig) Quick Tip lærer du hvordan du løser det vanlige problemet med flimring eller rive. Dette er en fryktelig effekt i Flash der bitmaps flimmer når de oppdateres, eller ser ut til å rive i to bilder (som i miniatyrbildet).


Hva forårsaker disse problemene?

I et nøtteskall skjer tårer når Flash trekker informasjon fra to forskjellige rammer til skjermen samtidig. I miniatyrbildet over, kan du se hvordan dette kan se ut når panorering over et bilde av et tårn; Den nederste delen av bildet er fra en ramme, mens den øverste halvdelen er fra den neste. Når du ser dette i gang, ser du det bare i en brøkdel av et sekund om gangen, men det vil fortsatt være merkbart.

Dette løses vanligvis ved hjelp av "V-synkronisering" (vertikal synkronisering), som stopper skjermkortets tegning noe til skjermen til skjermens neste oppdateringsprogram. Imidlertid har Flash virkelig dårlig støtte for V-synkronisering, fordi rammeplassen til Flash Player er forskjellig fra skrivebordets vertikale oppdateringsfrekvens, noe som betyr at objekter som har mye høyde blir slått hardt ved å rive. Dette gjelder selv om Flashs rammepris er lik den vertikale oppdateringshastigheten på skrivebordet, da de fremdeles ikke er synkronisert.

Nå kan du kanskje lure på: Hvorfor løser ikke Adobe dette problemet? Årsaken er at Flash bruker en tidslinje, og endring av rammefrekvensen endrer dermed hastigheten på avspillingen. Hvis du lagde et spill- eller bildegalleri på 60 bilder per sekund, og den vertikale oppdateringsfrekvensen på skrivebordet var mer enn 60 bilder per sekund, ville du enten ha liten stamming (hvis du forlot filmen med 60 fps), eller måtte spille av film tilbake raskere for å synkronisere med skrivebordet. For det meste innholdet vil dette ikke bli anbefalt i det hele tatt!

Dette er et problem spillutviklere har ønsket at Adobe skal fikse i lang tid, men det er åpenbart at det er problemer med dem å gjøre det. Så, for øyeblikket, må utviklere komme opp med kreative måter å løse dette problemet selv. Det er ingen enkel måte å fikse det på alle datamaskiner, men da de fleste skjermer har en oppdateringsfrekvens på 59,9 eller 60, kan du angi rammen til 60 for å løse den for de fleste brukere. Dette krever imidlertid mer prosessorkraft og kan redusere søknaden din nede.

Den beste måten å løse dette for øyeblikket er ganske enkel og lett å gjøre. Det løser ikke den underliggende årsaken, men det bidrar til å redusere mengden av rive så mye som mulig.


Hvordan kan jeg redusere tårer?

Maskinvare Acceleration Nivå 1: Direkte er nøkkelen til å hjelpe tårerproblemet. Dette kan settes ved å åpne HTML-filen der SWF er innebygd og redigere parametrene for Flash-objektet.

Flagget du vil angi er wmode: "direkte". Denne linjen går i avsnittet "Params" i HTML-koden din. Det er det som burde bidra dramatisk til å redusere tåringen. Hvis du vil vite hvorfor, se på Adobes side om maskinvareakselerasjon. Det forklarer litt om begge nivåer av maskinvareakselerasjon. For enda mer informasjon, sjekk ut denne grundige artikkelen.


Alt annet?

Ja; En annen ting å nevne er at jo flere objekter du har på skjermen, jo mer åpenbar blir tåren. Mindre elementer påvirkes ikke vanligvis av V-synk-problemer, men elementer på skjermen som er store gjør det veldig tydelig, så det er en god ide å holde antall store objekter til et minimum..

Også, ved hjelp av bitmapData.lock () og bitmapData.unlock () anbefales og har hjulpet noen med dette problemet. Når et BitmapData-objekt låses, stopper noen bitmapper fra å bli oppgradert til det er låst opp, noe som er en god ide hvis du må gjøre flere endringer mellom rammer. For å lære mer, ta en titt på dette blogginnlegget.


Konklusjon

Du kan gjøre noen ting for å redusere rive, men du kan ikke eliminere det helt. Redusere mengden av store objekter, innstilling wmode: "direkte" og bruk av bitmap låsing er de beste måtene å bidra til å redusere rive.