Desplazamiento por mapas de bits

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Supongamos que se ha creado una aplicación de mapas de calles en la que cada vez que el usuario mueve el mapa, hay que actualizar la vista (incluso si el mapa solo se ha movido unos pocos píxeles).

Una forma de crear esta funcionalidad sería volver a representar una nueva imagen que contuviese la vista actualizada del mapa cada vez que el usuario lo moviese. También se podría crear una única imagen de gran tamaño y utilizar el método scroll() .

El método scroll() copia un mapa de bits que aparece en pantalla y lo pega en una nueva posición desplazada, que viene especificada por los parámetros ( x , y ). Si una parte del mapa de bits se encuentra fuera de la pantalla, se produce la impresión que la imagen se ha desplazado. Cuando se combina con una función de temporizador (o un evento enterFrame ), se puede hacer que la imagen parezca moverse o desplazarse.

En el siguiente ejemplo se parte del ejemplo anterior del ruido de Perlin y se genera una imagen de mapa de bits mayor (tres cuartas partes de la cual se representan fuera de la pantalla). A continuación, se aplica el método scroll() junto con un detector de eventos enterFrame que desplaza la imagen un píxel en dirección diagonal descendente. Este método se llama cada vez que se entra en el fotograma y, de este modo, las partes de la imagen que quedan fuera de la pantalla se representan en el escenario a medida que la imagen se desplaza hacia abajo.

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); 
}