从mc中复制带有移动元素的像素

时间:2014-05-17 17:26:29

标签: actionscript-3

有没有办法从mc中复制像素,mc中有移动部件(就像一个从mc的一个角移动到另一个角并且无限重复的圆圈),每隔一秒复制到另一个mc。

然而,它不仅仅是复制它们,它必须是处理器/性能友好的,因为我确实找到了这样做的方法,但它有很多。

我的方式是:

    public class Main extends MovieClip
{
    private var myRainbow:Rainbow = new Rainbow();
    private var mySprite:Sprite = new Sprite();

    private var bmd:BitmapData;
    private var countainer:Sprite = new Sprite();
    private var bm:Bitmap = new Bitmap();

    public function Main()
    {
        this.addChild( mySprite );
        mySprite.addChild( myRainbow );
        mySprite.x = stage.stageWidth * 0.5 - myRainbow.width * 0.5;
        mySprite.y = stage.stageHeight * 0.5 - myRainbow.height * 0.5;

        bmd = new BitmapData( 50, 50 );
        bm.x = 0;
        bm.y = 0
        countainer.addChild( bm );
        addChild( countainer )
        countainer.x = 100
        countainer.y = 100

        countainer.addEventListener(MouseEvent.MOUSE_DOWN, onClick)
        this.addEventListener(Event.ENTER_FRAME, onFrame);
        this.addEventListener(MouseEvent.MOUSE_UP, drop);
    }

    private function onFrame( event:Event )
    {
        bmd.draw( mySprite, new Matrix( 1, 0, 0, 1, 0, 0 ), null, null, new Rectangle( 0, 0, 50, 50 ) );
        bm.bitmapData = bmd;
    }
    //dont mind the other methods.
}

Rainbow()实际上是包含移动元素的mc。

但是,当我在平板电脑上测试此代码时,其中4-5个元素从 Rainbow()(或在具有10-20个元素的PC上)复制不同的像素,它开始滞后。当然,每帧都是复制像素,但却无法找到另一种解决方案。

还有其他方法吗?我愿意接受任何建议。希望你遇到过这个问题。

PS:1:你可以看到我在这个链接上做了什么:Moving elements

PS:2:主MC(在我的情况下是Rainbow)将超过400x300尺寸,那些4-5个元素将显示主mc的不同部分,但将显示所有区域(我的意思是那个第一个mc将跟踪X维度从0到100的区域,从100到200的第二个,从200到300的第三个,从300到最后的第四个跟踪区域,并且它们将具有主MC的高度 - >在此案例300)

1 个答案:

答案 0 :(得分:1)

这是您的解决方案:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#copyPixels()

copyPixels在位图上非常快。您的问题是您每帧都在更改位图,如果在多个对象上完成,则不仅意味着您绘制源,而且每帧都会创建新的位图。

尝试复制像素,并确保使用目标,这将直接将位图放在正确的位置。

您还可以尝试在绘制之前锁定位图,这也会提高性能。