Skip to main content

creating a small drawing tool using as3 where you can draw with mouse and record and replay it my clicking on replay button


code 
==============================================
//import required packages
import com.greensock.*;
import com.greensock.easing.*;
//
var drawing:Boolean=false;
var eraseing:Boolean=false;
var drawingbroad:Sprite;
var linedraw:Sprite;
var eraserDraw:Sprite;
var xloc:Array=new Array();
var yloc:Array=new Array();
var type:Array=new Array();
var replayline:Sprite;
var replayeraser:Sprite;
var startpointPencil:Boolean=false;
var startpointeraser:Boolean=false;
var toolsArray=new Array("pencil","eraser","replay");
//
var recordconter:Number=-1;
var tooltype:String=null;
var recordTimer:Timer;
init();
function init() {
newDrawing();
addnewdrawing();
selectaTool();
}
function newDrawing():void {
clearAll()
drawingbroad=new Sprite();
this.addChild(drawingbroad);
drawingbroad.x=10;
drawingbroad.y=10;
drawingbroad.graphics.lineStyle(1,0x000000);
drawingbroad.graphics.beginFill(0xFFFFFF);
drawingbroad.graphics.drawRect(10,10,750,500);
drawingbroad.graphics.endFill();
drawingbroad.alpha=0;
TweenLite.to(drawingbroad, 1, {alpha:1});
dispatchpencilEvents();
}
function selectaTool():void {
pencil.buttonMode=true;
eraser.buttonMode=true;
replay.buttonMode=true;

}
//
function dispatchpencilEvents():void {
drawingbroad.addEventListener(MouseEvent.MOUSE_UP,selectedToofalse);
drawingbroad.addEventListener(MouseEvent.MOUSE_DOWN,selectedTootrue);
pencil.addEventListener(MouseEvent.MOUSE_DOWN,selectpencil);
drawingbroad.addEventListener(MouseEvent.MOUSE_MOVE,startDrawing);
eraser.addEventListener(MouseEvent.MOUSE_DOWN,selecteraser);
replay.addEventListener(MouseEvent.MOUSE_DOWN,showreplayaction);
}
function showreplayaction(e:MouseEvent):void {
tooltype="replay";
toolactive(tooltype);
recordTimer=new Timer(10,xloc.length);
recordTimer.addEventListener("timer",showrecordedaction);
recordTimer.start();
}
function clearAll():void
{
recordconter=0;
startpointPencil=false;
xloc=[];
yloc=[];
type=[];
}
function showrecordedaction(t:TimerEvent):void {
recordconter+=1;
if((recordconter+2)==xloc.length)
{
clearAll();
recordTimer.removeEventListener("timer",showrecordedaction);
}
type[recordconter];
if (type[recordconter]=="pencil") {
if (!startpointPencil) {
replayline=new Sprite();
replayline.graphics.moveTo(xloc[recordconter],yloc[recordconter]);
startpointPencil=true;
drawingbroad.addChild(replayline);
} else {
replaypencilaction(recordconter);
}
}  if (type[recordconter]=="eraser") {

replayeraseraction();
}
}
function replayeraseraction() {
replayeraser=new Sprite();
replayeraser.graphics.beginFill(0xFFFFFF);
replayeraser.graphics.drawRect(xloc[recordconter],yloc[recordconter],50,50);
replayeraser.graphics.endFill();
drawingbroad.addChild(replayeraser);


}
function replaypencilaction(recordconter):void {

replayline.graphics.lineStyle(1,0x000000);
replayline.graphics.lineTo(xloc[recordconter],yloc[recordconter]);
replayline.graphics.endFill();
drawingbroad.addChild(replayline);


}

function selectedToofalse(m:MouseEvent):void {
if (tooltype=="pencil") {
drawing=false;
eraseing=false;
} else if (tooltype=="eraser") {
drawing=false;
eraseing=false;
}
//TweenLite.to(linedraw, 0.5, {alpha:1});
}
function selectedTootrue(m:MouseEvent):void {
if (tooltype=="pencil") {
drawing=true;
eraseing=false;
} else if (tooltype=="eraser") {
drawing=false;
eraseing=true;
}
linedraw=new Sprite();
linedraw.graphics.moveTo(linedraw.mouseX,linedraw.mouseY);

}


//select a tool
function startDrawing(m:MouseEvent):void {
if (drawing && tooltype=="pencil") {
linedraw.graphics.lineStyle(1,0x000000);
linedraw.graphics.lineTo(drawingbroad.mouseX,drawingbroad.mouseY);
linedraw.graphics.endFill();
linedraw.alpha=0.2;
drawingbroad.addChild(linedraw);
xloc.push(mouseX);
yloc.push(mouseY);
type.push("pencil");

} else if (eraseing && tooltype=="eraser") {

eraserDraw=new Sprite();
eraserDraw.graphics.beginFill(0xFFFFFF);
if (drawingbroad.mouseX>(drawingbroad.width-50)) {
eraserDraw.graphics.drawRect(drawingbroad.mouseX-50,drawingbroad.mouseY,50,50);
} else if (drawingbroad.mouseY>(drawingbroad.height-50)) {
eraserDraw.graphics.drawRect(drawingbroad.mouseX,drawingbroad.mouseY-50,50,50);
} else {
eraserDraw.graphics.drawRect(drawingbroad.mouseX,drawingbroad.mouseY,50,50);
}

eraserDraw.graphics.endFill();
drawingbroad.addChild(eraserDraw);
xloc.push(mouseX);
yloc.push(mouseY);
type.push("eraser");
}
}

function selectpencil(m:MouseEvent):void {

tooltype="pencil";
toolactive(tooltype);


}

function selecteraser(m:MouseEvent):void {
tooltype="eraser";
toolactive(tooltype);
}

function toolactive(__tooltype):void {

switch (__tooltype) {
case "pencil" :
workwithpencil();
break;
case "eraser" :
workwitheraser();
break;
case "replay" :
workwithreplay();
break;
}
}
function activeMe():void {
for (var i in toolsArray) {
if (tooltype==toolsArray[i]) {
TweenLite.to(this[toolsArray[i]], 1, {alpha:0.2});
} else {
TweenLite.to(this[toolsArray[i]], 1, {alpha:1});
}
}
}
function workwithpencil():void {

activeMe();
}
function workwitheraser():void {
activeMe();
}
function workwithreplay():void {
activeMe();
}
//
function addnewdrawing():void {
newd.addEventListener(MouseEvent.CLICK,refreshpage);
}
function refreshpage(m:MouseEvent):void {
TweenLite.to(drawingbroad, 1, {alpha:0,onComplete:removeDrawing});

}
function removeDrawing():void {
if (drawingbroad) {
removeChild(drawingbroad);
drawingbroad=null;
}
newDrawing();
}

screen shot
==========================================





Comments

Popular posts from this blog

Better Memory management with PixiJS or How to manage cpu and cpu memory in PixiJS.

PixiJS is my favorite framework when i am looking for a web games specially for mobile or desktop  PixiJS is fast blazing fast and you can get a decent FPS even on older device.   so here is my optimization techniques for PixiJs 1. manage your sprites in a better way use spritesheet to reduce the draw calls create big sprite sheet which contain multiple sprites can be draw in gpu with a single draw call. use TexturePacker  https://www.codeandweb.com/texturepacker  best tool when its comes to spritesheet 2. for floating point calculation round off calculation for example let  speed = 0.75 ; let  position = 100 ; console . log ( Math . round ( speed * position )) 3. don't create very big canvas when u need a big canvas size game just try to create a small canvas and translate it. 4. its very important one managing TextureCache in memory you can get all TextureCache list by using  Object.entries(PIXI.utils.TextureCache); so even you use ap...

adding particles Effect in pixijs using https://pixijs.io/pixi-particles-editor/

adding particle in pixijs is very easy using the below tool more information can be found below https://github.com/pixijs/pixi-particles https://pixijs.io/pixi-particles-editor/ required packages  /// < reference path = "node_modules/pixi-particles/ambient.d.ts" /> import 'pixi-particles' code of particle delcare a     global variable   private emitter ?: Emitter ; const img = PIXI . Texture . from ( "./assets/images/particle.png" ); this . emitter = new Emitter ( this ,[ img ],{ "alpha" : { "start" : 0.62 , "end" : 0.39 }, "scale" : { "start" : 0.1 , "end" : 0.9 , "minimumScaleMultiplier" : 1.25 }, "color" : { "start" : "#ffff8f" , "end" : ...