0

我正在创建一个在 Android 上使用的简单绘图原型,用户可以在其中拖动手指在屏幕上绘制基本线条/形状等。在相同区域上绘制时我遇到了一些性能问题,一段时间后性能下降相当。

我想知道是否有任何方法可以在绘制线条之后(在触摸开始、触摸移动和触摸结束事件链之后)将新绘制的线条存储到包含其余绘图的位图中。

我已经看过了,bitmap.merge()但这会在混合颜色时产生问题。我只是希望将任何新的“绘图”保存在之前绘制的所有内容之上。

// To hold current 'drawing'
var clip:Shape = new Shape();   

// To hold past 'drawings'
var drawing:Bitmap = new Bitmap();

public function Main()
{
    Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

    addChild(drawing);
    addChild (clip);

    addEventListener(TouchEvent.TOUCH_BEGIN, tBegin);
    addEventListener(TouchEvent.TOUCH_MOVE, tMove);
    addEventListener(TouchEvent.TOUCH_END, tEnd);
}

private function tBegin(e:TouchEvent):void 
{
    clip.graphics.lineStyle(28,0x000000);
    clip.graphics.moveTo(mouseX, mouseY);  
}

private function tMove(e:TouchEvent):void 
{
    clip.graphics.lineTo(mouseX, mouseY);
}

private function tEnd(e:TouchEvent):void 
{
    // Save new graphics and merge with drawing
}
4

1 回答 1

2

只需保持在您的剪辑形状中绘图,然后在 tEnd 上在分配给位图的 bitmapData 内绘制剪辑

// To hold current 'drawing'
var bmpData:BitmapData = new BitmapData (800, 800) // put here your desired size

var clip:Shape = new Shape();   

// To hold past 'drawings'
var drawing:Bitmap = new Bitmap(bmpData);

public function Main()
{
    Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

    addChild(drawing);
    addChild (clip);



    addEventListener(TouchEvent.TOUCH_BEGIN, tBegin);
    addEventListener(TouchEvent.TOUCH_MOVE, tMove);
    addEventListener(TouchEvent.TOUCH_END, tEnd);
}

private function tBegin(e:TouchEvent):void 
{
    clip.graphics.lineStyle(28,0x000000);
    clip.graphics.moveTo(mouseX, mouseY);  
}

private function tMove(e:TouchEvent):void 
{
    clip.graphics.lineTo(mouseX, mouseY);
}

private function tEnd(e:TouchEvent):void 
{
    // Save new graphics and merge with drawing
    bmpData.draw (clip);
    clip.graphics.clear();
}
于 2012-12-12T15:23:32.143 回答