Fundo de rolagem repetitivo sem fim

Eu tenho um problema com o AS3 e o AIR. Estou trabalhando em um jogo de rolagem lateral para smartphones com um avião e uso planos de fundo diferentes como camadas.

Antes de todos os outros: eu uso GPU e apenas bitmaps, a qualidade está baixa. Assim, as configurações de desempenho estão todas definidas para o uso do smartphone.

Coloquei-os em um retângulo usando a API de desenho e movi o fundo com uma matriz:

protected var scrollingBitmap:BitmapData;
protected var canvas:Graphics;
protected var matrix:Matrix;

public function move(dx:Number, dy:Number):void {
    matrix.translate(dx, dy);
    if(dx != 0) matrix.tx %= scrollingBitmap.width;
    if(dy != 0) matrix.ty %= scrollingBitmap.height;
    drawCanvas();
}

protected function drawCanvas():void {
    canvas.clear();
    canvas.beginBitmapFill(scrollingBitmap, matrix, true, true);
    canvas.drawRect(0, -scrollingBitmap.height, 1404, scrollingBitmap.height);
}

UPDATE2 (

Dê uma olhada neste:http://plasticsturgeon.com/2010/06/infinite-scrolling-bitmap-backgrounds-in-as3/

Eu usei isso para criar meus fundos.

Com isso eu posso simular que meu avião está voando para a direita sem mover todo o fundo e eu posso usar um pequeno gráfico único que se repete toda vez (para a camada de primeiro plano).

Para a camada de fundo eu também uso este método, mas com um gráfico muito maior e eu o movo apenas com menos a velocidade do meu avião para simular um fundo distante.

Meu método de movimentação está em um evento de quadro de entrada. Então eu posso atualizar o fundo de cada quadro com o "movimento" do meu avião.

)

O avião pode exceder a altura dos bitmaps. Toda vez que o bitmap volta à janela / tela, ocorre um atraso muito longo. E quando o avião voa muito rápido, o jogo também começa a ficar lento.

Minha primeira abordagem foi usar arquivos .PNG (mas eles são muito grandes: tamanho de 1-3MB). Minha próxima abordagem foi usar arquivos .GIF (muito menos tamanho).

Com ambos é o mesmo. Então não pode ser isso.

Eu li sobre draw () e copyPixels (), mas eu não sei, como eu posso usá-los para repetir a imagem.

UPDATE1:

protected var scrollingBitmap:BitmapData;
protected var canvas:Bitmap;

protected function init(e:Event):void {
    removeEventListener(Event.ADDED_TO_STAGE, init);
    canvas = new Bitmap(new BitmapData(1404, scrollingBitmap.height, true), "auto", true);
    this.addChild(canvas);
    drawCanvas();
}

public function move(dx:Number, dy:Number):void {
    if(dx != 0) dx %= scrollingBitmap.width;
    if(dy != 0) dy %= scrollingBitmap.height;
    drawCanvas(dx, dy);
}

protected function drawCanvas(xPos:Number = 0, yPos:Number =  0):void {
    canvas.bitmapData.copyPixels(scrollingBitmap, new Rectangle(0, 0, 1404, scrollingBitmap.height), new Point(xPos, yPos), scrollingBitmap);
}

questionAnswers(2)

yourAnswerToTheQuestion