Представьте, что вы создали электронную карту города, и каждый раз, когда пользователь сдвигает карту, нужно обновлять картинку (даже если карта сдвигается всего на несколько пикселов).
Один из способов реализации этой функциональности — перерисовывать изображение каждый раз, когда карта сдвигается. Другой путь — создать единое крупное изображение и применить метод
scroll()
.
Метод
scroll()
копирует растровое изображение на экране и вставляет его в новый экран со смещением, определяемым параметрами (
x
,
y
). Если часть изображения лежит за границами области видимости, создается эффект смещения. В сочетании с функцией таймера (или события
enterFrame
) этот метод позволяет анимировать прокрутку изображения.
В примере ниже показано, как превратить изображение с шумом Перлина (из предыдущего примера) в более крупное, три четверти которого остаются вне области видимости. Затем применяются метод
scroll()
и прослушиватель событий
enterFrame
, который смещает изображение на один пиксел по диагонали вниз. Этот метод вызывается каждый раз при вводе кадра, поэтому области за пределами зоны видимости визуализируются в рабочей области по мере смещения вниз.
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);
}