PDA

Просмотр полной версии : Рисование только в определенной области


Vansimar
31.05.2013, 10:41
вот код private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
screen.addEventListener(MouseEvent.MOUSE_DOWN, handlerDown);
screen.addEventListener(MouseEvent.MOUSE_UP, handlerUp);
screen.x = 11;
screen.y = 11;
shape = new Shape();
addChild(screen);
(screen as MovieClip).addChild(shape);
shape.graphics.lineStyle(2, 0xFF0000);
shape.graphics.moveTo(mouseX, mouseY);

screen.addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
}

private function onLoop(e:Event):void
{
if (drawing)
{

shape.graphics.lineTo(mouseX, mouseY);

}
else
{
shape.graphics.moveTo(mouseX, mouseY);

}
}

private function handlerUp(e:Event):void
{
drawing = false;
}

private function handlerDown(e:Event):void
{
drawing = true;
}



я хочу сделать так,чтоб была возможность рисовать только в определенной области,в мувике screen, чтоб рисованые линии не выходили за пределы мувика,не подскажете,как это можно сделать?

vitamin4er
31.05.2013, 11:18
Создаешь класс (пускай это будет Slide) расширяющий спрайт и там пишешь примерно такое
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Rectangle;

/**
* ...
* @author vitamin4er
*/
public class Slide extends Sprite
{

private var canvas:Bitmap;
private var border:Shape;
private var virtualCanvas:Shape;
private var isDrawing:Boolean = false;
private var lastX:int;
private var lastY:int;

public function Slide()
{
createCanvas();
registerListeners();
}

private function registerListeners():void
{
this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
}

private function mouseUp(e:MouseEvent):void
{
isDrawing = false;
}

private function mouseMove(e:MouseEvent):void
{
if (isDrawing) {
var thisX:int = e.localX;
var thisY:int = e.localY;
drawLine(lastX, lastY, thisX, thisY);

lastX = thisX;
lastY = thisY;
e.updateAfterEvent();
}
}

private function mouseDown(e:MouseEvent):void
{
isDrawing = true;
lastX = e.localX;
lastY = e.localY;
drawPoint(e.localX, e.localY);
}

private function drawPoint(x:int,y:int,color:uint = 0xFF000000):void {
canvas.bitmapData.setPixel(x, y, color);
}

private function drawLine(x1:int, y1:int, x2:int, y2:int, color:uint = 0xFF000000):void {
virtualCanvas.graphics.clear();
virtualCanvas.graphics.lineStyle(1, 0x000000);
virtualCanvas.graphics.moveTo(x1, y1);
virtualCanvas.graphics.lineTo(x2, y2);

canvas.bitmapData.draw(virtualCanvas);
}

private function createCanvas():void
{
virtualCanvas = new Shape();
var canvasData:BitmapData = new BitmapData(w, h, false, 0xFFFFFFFF);
canvas = new Bitmap(canvasData);
this.addChild(canvas);
border = new Shape();
border.graphics.lineStyle(1, 0x000000);
border.graphics.drawRect(0, 0, w, h);
this.addChild(border);
}

}

}

Это простенькая рисовалка...затем создаешь ее экземпляр и на сцену
var slide:Slide = new Slide();
addChild(slide);

Vansimar
31.05.2013, 11:21
Спасибо большое!! очень помог!