Бесконечный повторяющийся фон прокрутки

У меня проблема с AS3 и AIR. Я работаю над игрой с боковой прокруткой для смартфонов с плоскостью и использую разные фоны в качестве слоев.

Прежде всего: я использую GPU и только растровые изображения, качество установлено на низкое. Таким образом, настройки производительности настроены для использования смартфоном.

Я поместил их в прямоугольник, используя API рисования, и переместил фон с помощью матрицы:

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 (

Взгляните на это:http://plasticsturgeon.com/2010/06/infinite-scrolling-bitmap-backgrounds-in-as3/

Я использовал это, чтобы создать свой фон.

При этом я могу смоделировать, что моя плоскость летит вправо, не перемещая весь фон, и я могу использовать маленький отдельный рисунок, который повторяется каждый раз (для слоя переднего плана).

Для фонового слоя я также использую этот метод, но с гораздо большим графиком и перемещаю его только с меньшей скоростью моей плоскости, чтобы имитировать дальний фон.

Мой метод move находится на событии enterframe. Таким образом, я могу обновить фон каждого кадра с помощью «движения» моего самолета.

)

Плоскость может превышать высоту растровых изображений. Каждый раз, когда растровое изображение возвращается в окно / экран, происходит очень длительное отставание. И когда самолет летит очень быстро, игра тоже начинает лагать.

Моим первым подходом было использование файлов .PNG (но они очень большие: размер 1-3 МБ). Следующим моим подходом было использование файлов .GIF (гораздо меньшего размера).

С обоими это одинаково. Так что это не может быть так.

Я читал про draw () и copyPixels (), но не знаю, как их использовать, чтобы повторить изображение.

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

Ответы на вопрос(2)

Ваш ответ на вопрос