![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1.3 10.06.07]
Регистрация: Jun 2007
Сообщений: 60
|
А как для каждого отрезка создавать новый мувик?
|
|
|||||
|
Цитата:
з.ы. через BitmapData я бы так делал: в том месте, где находится ластик, копировал пиксели фона и переносил бы на основное изображение |
|
|||||
|
примерная схема
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
public class Test extends Sprite{
private var render:Function=myNull;
private var canvas:Sprite;
private var pen:Point;
private var maxLength:Number=7;
private var drawBut:But;
private var clearBut:But;
public function Test(){
canvas=new Sprite();
canvas.graphics.beginFill(0xCCCCCC);
canvas.graphics.drawRect(0,0,550,400);
addChild(canvas);
drawBut=new But("draw");
addChild(drawBut);
clearBut=new But("clear");
clearBut.x=drawBut.width+10;
addChild(clearBut);
drawBut.addEventListener(MouseEvent.CLICK,drawClick);
clearBut.addEventListener(MouseEvent.CLICK,clearClick);
canvas.addEventListener(MouseEvent.MOUSE_DOWN,startRender);
canvas.addEventListener(MouseEvent.MOUSE_UP,stopRender);
}
private function drawClick(evnt:MouseEvent):void{
render=myDraw;
drawBut.backgroundColor=0xFFFFFF;
clearBut.backgroundColor=0x999999;
}
private function clearClick(evnt:MouseEvent):void{
render=myClear;
drawBut.backgroundColor=0x999999;
clearBut.backgroundColor=0xFFFFFF;
}
private function startRender(evnt:MouseEvent):void{
canvas.addEventListener(MouseEvent.MOUSE_MOVE,render);
pen=new Point(mouseX,mouseY);
}
private function stopRender(vnt:MouseEvent):void{
canvas.removeEventListener(MouseEvent.MOUSE_MOVE,render);
}
private function myDraw(evnt:MouseEvent):void{
var p:Point=new Point(mouseX,mouseY);
//рисуем только больше минимальной длины..
if(Point.distance(p,pen)>=maxLength){
var s:Sprite=new Sprite();
canvas.addChild(s);
s.graphics.lineStyle(1,0xFF0000);
s.graphics.moveTo(pen.x,pen.y);
s.graphics.lineTo(mouseX,mouseY);
pen=p;
}
}
private function myClear(evnt:MouseEvent):void{
for(var i:int=0;i<canvas.numChildren;i++){
var line:Sprite=canvas.getChildAt(i) as Sprite;
if(line.hitTestPoint(mouseX,mouseY)) canvas.removeChild(line);
}
}
private function myNull(evnt:MouseEvent):void{
}
}
}
import flash.text.TextField;
class But extends TextField{
public function But(txt:String){
text=txt;
autoSize="left";
selectable=false;
background=true;
backgroundColor=0x999999;
}
}
|
|
|||||
|
Регистрация: Jun 2007
Сообщений: 7
|
Если фон не однотонный, как задать именно те пиксели которые должны быть в данном месте?
|
|
|||||
|
Цитата:
![]() з.ы. а лучше пиксели изображения(которое мы стираем) делать просто прозрачными. |
|
|||||
|
Регистрация: Jun 2007
Сообщений: 7
|
В битмап загнал, спасибо. Но как делать его прозрачным при ster = true
if ((m_x>0 && m_x<310) && (m_y>0 && m_y<310)) { child.graphics.lineTo(avatar_mc.mouseX, avatar_mc.mouseY); }if(ster){??????????}else{ canvas.bitmapData.draw(child);} } |
|
|||||
|
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
wandr1, отредактируйте свой пост и оформите код тегами [code][/code].
|
|
|||||
|
с битмапом, канеш удобнее..
как вариант: рисовать в невидимом шейпе, который срисовывать в битмап с разным блендМод, в зависимости от режима рисования или стерки: package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.TextField;
public class DrawTest extends Sprite {
var colors:Array=[0,0xFF0000,0x00FF00,0x0000FF];
var sizes:Array=[8,12,16,20];
var drawColor:Number=0;
var drawSize:Number=12;
var drawMode:Boolean=true;
var modeSelector:TextField;
var drawSprite:Sprite;
var drawShape:Shape=new Shape();
var canvas:Bitmap;
var startPoint:Point;
public function DrawTest(){
modeSelector=new TextField();
modeSelector.selectable=false;
modeSelector.background=true;
modeSelector.backgroundColor=0xEEEEEE;
modeSelector.text="draw";
modeSelector.width=50;
modeSelector.height=20;
modeSelector.addEventListener(MouseEvent.CLICK,switchMode);
addChild(modeSelector);
var i:Number=0;
for(i=0;i<colors.length;i++){
var cs:ColorSelector=new ColorSelector(colors[i]);
cs.x=100+60*i;
cs.y=20;
addChild(cs);
cs.addEventListener(MouseEvent.CLICK,switchColor);
}
////////////////
for(i=0;i<sizes.length;i++){
var ss:SizeSelector=new SizeSelector(sizes[i]);
ss.x=100+60*i;
ss.y=60;
addChild(ss);
ss.addEventListener(MouseEvent.CLICK,switchSize);
}
//////////////
drawSprite=new Sprite();
drawSprite.y=80;
drawSprite.graphics.beginFill(0xF5F5F5);
drawSprite.graphics.drawRect(0,0,550,300);
//просто закрасил, можно картнку пложить или еще чего..
//drawSprite.addChild(new Bitmap(new Pic(0,0)));//Pic-картинка в библиотеке
addChild(drawSprite);
canvas=new Bitmap(new BitmapData(550,300,true,0));
drawSprite.addChild(canvas);
drawSprite.addEventListener(MouseEvent.MOUSE_DOWN,startDraw);
drawSprite.addEventListener(MouseEvent.MOUSE_UP,stopDraw);
}
private function switchMode(e:MouseEvent):void{
drawMode=!drawMode;
modeSelector.text=drawMode ? "draw" : "erase";
}
private function switchColor(e:MouseEvent):void{
var s=e.target as ColorSelector;
drawColor=s.color;
}
private function switchSize(e:MouseEvent):void{
var s=e.target as SizeSelector;
drawSize=s.size;
}
private function startDraw(e:MouseEvent):void{
drawSprite.addEventListener(Event.ENTER_FRAME,render);
startPoint=new Point(drawSprite.mouseX,drawSprite.mouseY);
}
private function stopDraw(e:MouseEvent):void{
drawSprite.removeEventListener(Event.ENTER_FRAME,render);
}
private function render(e:Event):void{
drawShape.graphics.lineStyle(drawSize,drawColor);
drawShape.graphics.moveTo(startPoint.x,startPoint.y);
startPoint=new Point(drawSprite.mouseX,drawSprite.mouseY);
drawShape.graphics.lineTo(startPoint.x,startPoint.y);
canvas.bitmapData.draw(drawShape,null, null,drawMode? null:BlendMode.ERASE);
drawShape.graphics.clear();
}
}
}
/////////////////////////////////
import flash.display.Sprite;
class SizeSelector extends Sprite{
public var size:Number;
public function SizeSelector(d:Number){
size=d;
graphics.beginFill(0xCCCCCC);
graphics.drawCircle(0,0,d/2);
}
}
////////////////////////////////////////
class ColorSelector extends Sprite{
public var color:Number;
public function ColorSelector(clr:Number){
color=clr;
graphics.beginFill(clr);
graphics.drawCircle(0,0,15);
}
}
|
![]() |
![]() |
Часовой пояс GMT +4, время: 15:53. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|