Посмотрите на это:
http://megaswf.com/serve/1368761/
Требуется другой подход: рисовать исходный mc в растровом изображении, а затем рисовать прямоугольник движущегося источника в статическое растровое изображение.
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Point;
import flash.geom.Rectangle;
[SWF(backgroundColor="#FFFFFF", frameRate="60", width="500", height="400")]
public class Main extends Sprite
{
[Embed(source="assets/swf/assets.swf", symbol="Background")]
private var Background:Class;
private var __app_w:int = 500;
private var __app_h:int = 400;
private var __src_rect:Rectangle = new Rectangle(0, 0, __app_w, __app_h);
private var __src_bmpd:BitmapData;
private var __dest_bmpd:BitmapData = new BitmapData(__app_w, __app_h);
private var __dest_pt:Point = new Point();
/* Constructor
----------------------------------------------------------------------------------------------*/
public function Main()
{
stage.addEventListener(Event.RESIZE, _onStageResized, false, 0, true);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
// Initialise
__src_bmpd = _bmpd;
scrollRect = __src_rect;
cacheAsBitmap = true;
opaqueBackground = 0xFFFFFF;
addChild(new Bitmap(__dest_bmpd)) as Bitmap;
addEventListener(Event.ENTER_FRAME, _onEnterFrame, false, 0, true);
}
private function _onStageResized(event:Event):void
{
x = (stage.stageWidth >> 1) - (__app_w >> 1);
y = (stage.stageHeight >> 1) - (__app_h >> 1);
}
public function _onEnterFrame(event:Event):void
{
__src_rect.x = (__src_rect.x == __app_w) ? 0 : __src_rect.x + 2;
__dest_bmpd.copyPixels(__src_bmpd, __src_rect, __dest_pt);
}
private function get _bmpd():BitmapData
{
var mc:Sprite = new Sprite(),
b1:Sprite = mc.addChild(new Background()) as Sprite,
b2:Sprite = mc.addChild(new Background()) as Sprite,
bmpd:BitmapData;
b1.x = 0;
b2.x = b1.width;
bmpd = new BitmapData(mc.width, mc.height, false);
bmpd.draw(mc);
return bmpd;
}
}
}