Цитата:
|
И довольно сильно тормозит воспроизведение. Можете подсказать, что я делаю не так? Параметры таймера ставлю одинаковые и там и там.
|
Воспроизведение тормозит, наверно потому что сильно много образуется векторных линий в mySprite.graphics, надо кешировать graphics в битмапдату например как-то так

Код AS3:
package
{
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.utils.*;
/**
* ...
* @author Lexcuk
*/
public class BitiDoc extends Sprite
{
public var mySprite:Sprite;
public var bmd:BitmapData;
public var bm:Bitmap;
public var lastMousePos:Point;
public function BitiDoc()
{
addChild(mySprite = new Sprite());
addChild(bm = new Bitmap(bmd = new BitmapData(800, 600,true,0x00000000)));
var timer:Timer = new Timer(1);
lastMousePos = new Point();
timer.start();
timer.addEventListener(TimerEvent.TIMER, timerHandler);
}
public function timerHandler(e:TimerEvent):void {
mySprite.graphics.clear();
mySprite.graphics.lineStyle(3, 0);
mySprite.graphics.moveTo(lastMousePos.x, lastMousePos.y);
mySprite.graphics.lineTo(lastMousePos.x = stage.mouseX, lastMousePos.y = stage.mouseY);
var spRect:Rectangle = mySprite.getBounds(mySprite);
var mat:Matrix = new Matrix();
mat.translate( -spRect.x, -spRect.y);
if (spRect.width > 200) spRect.width = 200;
if (spRect.height > 200) spRect.height = 200;
var b:BitmapData = new BitmapData(spRect.width, spRect.height,true,0x00000000);
b.draw(mySprite, mat, null, null, null, true);
bmd.copyPixels(b, new Rectangle(0, 0, spRect.width, spRect.height), new Point(spRect.x, spRect.y), null, null, true);
}
}
}
Так сколько бы линий не было тормозов не будет, потому что graphics спрайта чистый.