Przewijanie bitmap

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Wyobraźmy sobie, że użytkownik utworzył aplikację odwzorowującą ulicę, gdzie każde przesunięcie mapy powoduje konieczność jej aktualizacji (nawet jeśli mapę przesunięto zaledwie o kilka pikseli).

Jednym ze sposobów utworzenia takiej funkcjonalności jest ponowne zrenderowanie nowego obrazu zawierającego zaktualizowany widok mapy za każdym razem po przemieszczeniu tej mapy. Można również utworzyć pojedynczy obraz oraz użyć metody scroll() .

Metoda scroll() umożliwia skopiowanie bitmapy na ekranie, a następnie wklejenie jej do nowego, przesuniętego miejsca — określonego parametrami ( x , y ). Jeśli część bitmapy znajdzie się poza stołem montażowym, daje to efekt, jak gdyby obraz został przesunięty. W połączeniu z funkcją timer (lub ze zdarzeniem enterFrame ) funkcjonalność tę można wykorzystać do utworzenia obrazu, który wydaje się być animacją lub wygląda, jakby był przewijany.

W poniższym przykładzie użyto szumu perlin z poprzedniego przykładu, generując większy obraz bitmapowy (z którego trzy czwarte jest renderowane poza stołem montażowym). Następnie stosowana jest metoda scroll() wraz z detektorem zdarzeń enterFrame , który powoduje przesunięcie obrazu po przekątnej o jeden piksel w dół. Metoda ta jest wywoływana za każdym razem po przejściu do klatki, a jej wynikiem jest renderowanie fragmentów obrazu na stół montażowy w miarę przewijania obrazu.

import flash.display.Bitmap; 
import flash.display.BitmapData; 
 
var myBitmapDataObject:BitmapData = new BitmapData(1000, 1000, false, 0x00FF0000); 
var seed:Number = Math.floor(Math.random() * 100); 
var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE; 
myBitmapDataObject.perlinNoise(100, 80, 6, seed, false, true, channels, false, null); 
 
var myBitmap:Bitmap = new Bitmap(myBitmapDataObject); 
myBitmap.x = -750; 
myBitmap.y = -750; 
addChild(myBitmap); 
 
addEventListener(Event.ENTER_FRAME, scrollBitmap); 
 
function scrollBitmap(event:Event):void 
{ 
    myBitmapDataObject.scroll(1, 1); 
}