Considerate l'esempio di un'applicazione di generazione di mappe stradali in cui, ogni volta che l'utente sposta la mappa, è necessario aggiornare la visualizzazione (anche se la mappa è stata spostata di pochi pixel).
Un modo per creare questa funzionalità consiste nell'eseguire nuovamente il rendering di una nuova immagine che contiene la visualizzazione aggiornata della mappa ogni volta che l'utente la sposta. In alternativa, potete creare una singola immagine di grandi dimensioni e utilizzare il metodo
scroll()
.
Il metodo
scroll()
copia una bitmap presente sullo schermo e la incolla in una nuova posizione offset, specificata dai parametri (
x
,
y
). Se una porzione della bitmap si trova al di fuori dello stage, si ottiene l'effetto dello spostamento della mappa. Se utilizzate anche una funzione timer (o un evento
enterFrame
), potete dare l'impressione che l'immagine sia animata o scorrevole.
Nell'esempio seguente viene utilizzato il precedente esempio del disturbo Perlin e viene generata un'immagine bitmap più grande (tre quarti della quale è al fuori dello stage). Quindi, viene applicato il metodo
scroll()
, insieme a un listener di eventi
enterFrame
che sposta l'immagine di un pixel in diagonale verso il basso. Questo metodo viene chiamato ogni volta che si accede al fotogramma e, di conseguenza, il rendering delle porzioni fuori schermo dell'immagine viene eseguito quando l'immagine scorre verso il basso.
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);
}