Я разрабатываю приложение для рисования AS3. То, что я пытаюсь, это в основном подражать MS Paint. Мне нужно создать инструмент кисти. Кисть имеет множество форм (кончик кисти), таких как квадрат, круг, ромб. Изначально я планировал использовать класс графики, но некоторые мудрые ребята посоветовали мне использовать класс Bitmap. Я разработал класс, и, кажется, работает нормально. Но две проблемы, которые затрагивают меня сейчас
- Если я увеличу скорость мыши, рисунок станет прерывистым.
- Идея, которую я имею для преодоления этого, состоит в том, чтобы вычислить точки между последней точкой и текущей точкой и нарисовать окружности в этих точках. Но эта идея создаст мне проблемы, когда я перемещу мышь по образцу кривой.
пакет {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.*;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.ui.Keyboard;
[SWF(width=600,height=400,backgroundColor=0x000000)]
/**
* Demonstrates BitmapData's draw() command by duplicating the entirety of the stage using draw()
* whenever the space bar is pressed. A smaller copy is also drawn onto the stage to show how draw()
* can be used to transform the pixels in the image being drawn.
*/
public class DrawTest extends Sprite {
private var _circle:Sprite;
private var _bitmapData:BitmapData;
/**
* Constructor. Creates bitmap that will be drawn into and circle that will follow the mouse.
* A listener is also set up to handle then a key is pressed.
*/
public function DrawTest() {
createBitmap();
createCircle();
stage.addEventListener(MouseEvent.MOUSE_DOWN,_handleMouseEventBrush);
stage.addEventListener(MouseEvent.MOUSE_UP,_handleMouseEventBrush);
}
/**
* Creates bitmap data that the stage contents will be drawn into and adds this to the stage.
*/
private function createBitmap():void {
_bitmapData=new BitmapData(stage.stageWidth,stage.stageHeight,true,0x000000);
var bitmap:Bitmap=new Bitmap(_bitmapData);
addChild(bitmap);
}
/**
* Creates a circle shape that is set to follow the mouse as it moves.
*/
private function createCircle():void {
_circle=new Sprite ;
_circle.graphics.beginFill(0xFF0000);
_circle.graphics.drawCircle(0,0,10);
_circle.graphics.endFill();
addChild(_circle);
_circle.x=stage.mouseX;
_circle.y=stage.mouseY;
_circle.startDrag();
}
private function _handleMouseEventBrush(e:MouseEvent):void {
switch (String(e.type)) {
case "mouseDown" :
_bitmapData.draw(stage);
stage.addEventListener(MouseEvent.MOUSE_MOVE,_handleMouseEventBrush);
break;
case "mouseUp" :
stage.removeEventListener(MouseEvent.MOUSE_MOVE,_handleMouseEventBrush);
break;
case "mouseMove" :
_bitmapData.draw(stage);
}
}
}
Кто-нибудь знает, как преодолеть это?