0

私は虫眼鏡効果をやっていますか?

私は作業バージョンを持っています。ただし、タブレットでのパフォーマンスは十分ではありません。

私がこれまでに行ったこと:

mouseDown で ENTERFRAME イベントが発生しました

そのため、マウスがクリックされたときに画面のキャプチャを開始し、mouseX と mouseY に従います。

それは機能しますが、唯一の問題は、mouseX と mosueY の周り (300px * 300px) ではなく、ステージ全体を描画することです。mouseX と mouseY に従って描画領域を作成する方法はありますか。それが演奏にも役立っていると思います。:)

e.target.removeEventListener(Event.ENTER_FRAME, startCapture);

function startCapture(e:Event):void{
    var glassWidth:uint=80;
    var glassHeight:int=80;
    var curBd:BitmapData;
    var curBmp:Bitmap;
    var posX:int = _parentStage.mouseX - 40;
    var posY:int = _parentStage.mouseY - 40;

    //-------------------------------------------------------------
    //var subArea:Rectangle = new Rectangle(0,0,500,500);
    //var newBmp:Bitmap = new BitmapData(500,500);
    //var cutoutBmp:Bitmap = new Bitmap( newBmp, PixelSnapping.ALWAYS, true );
    //cutoutBmp.bitmapData.draw( jpgSource, new Matrix(1, 0, 0, 1, -357, -341) , null, null, subArea, true );
    //-------------------------------------------------------------

    bd = new BitmapData(1024, 768, true, 0);
    var subArea:Rectangle = new Rectangle(_parentStage.mouseX, _parentStage.mouseY, 500, 500);
   // bd = new BitmapData(500, 500);
   bd.draw(_parentStage.mc_mainContainer);
    // bd.draw(_parentStage.mc_mainContainer);

    curBmp=new Bitmap(new BitmapData(glassWidth,glassHeight), PixelSnapping.ALWAYS);
    curBmp.bitmapData.copyPixels(bd,new Rectangle(posX,posY,_parentStage.mouseX,_parentStage.mouseY),new Point(0,0));
    curBd=curBmp.bitmapData;

    var ma:Matrix = new Matrix(1, 0, 0, 1, -40, -40);
    glass.name = 'glass';
    glass.alpha = 1;
    glass.graphics.clear();
    glass.graphics.beginBitmapFill(curBd, ma);
    glass.graphics.drawCircle(0, 0, 35);
    //glass.graphics.drawCircle(0, 0, 35);
    glass.graphics.endFill();

    //var imageCircle:Bitmap = new _magGlass();
    //trace(_magGlass);
    //glass.addChild(_magGlass);

    if(!_parentStage.contains(glass))_parentStage.addChildAt(glass, _parentStage.numChildren - 2);
    glass.x = _parentStage.mouseX;
    glass.y = _parentStage.mouseY - 75;
}
4

1 に答える 1

2

パフォーマンスの問題の原因は、フレームごとに新しいビットマップとビットマップデータと長方形を作成している場所です。代わりに、コンストラクターまたはクリックで 1 つまたは 2 つを作成し、それらを再利用します。既に BitmapData があるので、グラスでグラフィックス オブジェクトを使用するのではなく、おそらくそれをステージ上に置いてマスクすることができます。少なくともどちらかのアプローチを選択してください。両方を実行すると、パフォーマンスが低下します。

于 2012-10-25T01:29:06.757 に答える