I dagens (Very) Quick Tip läser du hur du löser det vanliga problemet med att flimra eller riva. Det här är en hemsk effekt i Flash, där bitmappar flimrar när de uppdateras eller verkar riva i två bilder (som i miniatyrbilden).
I ett nötskal: tårning sker när Flash drar information från två olika ramar till skärmen samtidigt. I miniatyrbilden ovan kan du se hur det här kan se ut när du panorerar över en bild av ett torn; Den nedre delen av bilden är från en ram, medan den övre halvan är från nästa. När du tittar på det här, skulle du bara se det i en bråkdel av en sekund i taget, men det skulle fortfarande vara märkbart.
Detta löses vanligtvis med hjälp av "V-synkronisering" (vertikal synkronisering), vilket stoppar grafikkortritningen något till skärmen tills skärmens nästa uppdateringscykel. Men Flash har verkligen dåligt stöd för V-synkronisering, eftersom bildhastigheten för Flash Player skiljer sig från skrivarens vertikala uppdateringshastighet, vilket betyder att objekt som har mycket höjd kommer att drabbas hårt av att riva. Detta gäller även om Flash-bildfrekvensen är lika med den vertikala uppdateringshastigheten för skrivbordet, eftersom de fortfarande inte synkroniseras.
Nu kanske du undrar: Varför fixar inte Adobe detta problem? Anledningen är att Flash använder en tidslinje, och ändringen av bildhastigheten ändrar följaktligen uppspelningshastigheten. Om du skapade ett spel- eller bildgalleri med 60 bilder per sekund och den vertikala uppdateringshastigheten för skrivbordet var mer än 60 bilder per sekund, skulle du antingen ha en liten stammar (om du lämnade filmen vid 60fps) eller skulle behöva spela film tillbaka snabbare för att synkronisera med skrivbordet. För det mesta innehållet rekommenderas det inte alls!
Detta är ett problem spelutvecklare har velat ha Adobe att fixa länge, men det är uppenbart att det finns problem med dem att göra det. Så, för närvarande måste vi utveckla kreativa sätt att lösa detta problem själva. Det finns inget enkelt sätt att fixa det på alla datorer, men eftersom de flesta bildskärmar har en uppdateringsfrekvens på 59,9 eller 60 kan du ställa in bildhastigheten till 60 för att lösa den för de flesta användare. Detta kräver dock mer bearbetningseffekt och kan sakta ner din ansökan.
Det bästa sättet att lösa detta just nu är ganska enkelt och enkelt att göra. Det löser inte den bakomliggande orsaken, men det hjälper till att minska mängden riva så mycket som möjligt.
Hårdvaruacceleration Nivå 1: Direkt är nyckeln till att hjälpa riva problem. Detta kan ställas in genom att öppna HTML-filen där din SWF är inbäddad och redigera parametrarna för Flash-objektet.
Flaggan du vill ställa in är wmode: "direkt"
. Den här raden går i avsnittet "Params" i HTML-koden. Det är det som borde hjälpa till att dramatiskt minska riva. Om du vill veta varför, kolla på Adobes sida om hårdvaruacceleration. Det förklarar lite om båda nivåerna av hårdvaruacceleration. För mer information, kolla in den här djupartikeln.
Ja; En annan sak att nämna är att ju fler objekt du har på skärmen, desto tydligare blir riven. Mindre saker påverkas vanligtvis inte av V-sync-problem, men objekt på skärmen som är stora gör det väldigt uppenbart, så att antalet stora objekt minimeras är en bra ide.
Använd också bitmapData.lock ()
och bitmapData.unlock ()
rekommenderas och har hjälpt vissa människor med detta problem. Att låsa ett BitmapData-objekt stannar eventuella bitmappar från att omräknas tills det låser upp vilket är en bra idé om du behöver göra flera ändringar mellan ramar. För att lära dig mer, ta en titt på det här blogginlägget.
Du kan göra några saker för att minska riva men du kan inte eliminera det helt. Minskar mängden stora objekt, inställning wmode "direkt"
och med hjälp av bitmap låsning är de bästa sätten att hjälpa till att minska riva.