Jackson Pollock – From AS2 to AS3
8 years ago
I found a Jackson Pollock style painting example written in AS2 called ‘Splatter’ over at stamen.com. I wanted to include a Pollock style brush in my painting application so I converted it into AS3. Just copy and past the following code into a new AS3 document in Flash.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | import flash.events.MouseEvent; import flash.display.MovieClip; //set up some vars var new_size_influence:Number = 0.5; var mid_point_push:Number = 0.75; var max_line_width:Number = (Math.random() * 50) + 50; //vars for line colour and alpha var _colour:uint = 0x000000; var _alpha:Number = 1; //create var to hold all mouse position data var obj:Object = new Object(); obj.x = 0; obj.y = 0; obj.start_x = obj.mid_x = obj.end_x = (stage.stageWidth / 2); obj.start_y = obj.mid_y = obj.end_y = (stage.stageHeight / 2); obj.size = 0; //add mouse down event listener stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown); function onDown(e:MouseEvent):void { //create random colour _colour = Math.random()*0xFFFFFF; //set all line data to current mouse position obj.start_x = obj.mid_x = obj.end_x = mouseX; obj.start_y = obj.mid_y = obj.end_y = mouseY; //add mouse up and mouse move event listeners stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove); stage.addEventListener(MouseEvent.MOUSE_UP, onUp); } function onUp(e:MouseEvent):void { //remove mouse up and mouse move event listeners stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove); stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); } function onMove(e:MouseEvent):void { //find the mid point between current and last mouse position obj.mid_x = ((obj.end_x - obj.start_x) * (1 + mid_point_push)) + obj.start_x; obj.mid_y = ((obj.end_y - obj.start_y) * (1 + mid_point_push)) + obj.start_y; //set start to last point obj.start_x = obj.end_x; obj.start_y = obj.end_y; //set end to current point obj.end_x = mouseX; obj.end_y = mouseY; //get distance between start and end point var distance:Number = Math.sqrt(Math.pow((obj.end_x - obj.start_x), 2) + Math.pow((obj.end_y - obj.start_y), 2)); //set size depending on distance var new_size:Number = max_line_width / distance; obj.size = (new_size_influence * new_size) + ((1 - new_size_influence) * obj.size); //draw the line graphics.lineStyle(obj.size,_colour,_alpha); graphics.moveTo(obj.start_x, obj.start_y); graphics.curveTo(obj.mid_x, obj.mid_y, obj.end_x, obj.end_y); // splotch var dd:Number = Math.sqrt(Math.pow((obj.end_x - obj.start_x), 2) + Math.pow((obj.end_y - obj.start_y), 2)); for (var i:int = 0; i<Math.floor(5*Math.pow(Math.random(), 4)); i++) { // positioning of splotch varies between ±4dd, tending towards 0 var splat_range:int = 1; var x4:Number = dd * 1 * (Math.pow(Math.random(), splat_range) - (splat_range/2)); var y4:Number = dd * 1 * (Math.pow(Math.random(), splat_range) - (splat_range/2)); // direction of splotch varies between ±0.5 var x5:Number = Math.random() - 0.5; var y5:Number = Math.random() - 0.5; var d_:Number = obj.size*(0.5+Math.random()); //draw the splotches graphics.lineStyle(d_, _colour, _alpha); graphics.moveTo((obj.start_x+x4), (obj.start_y+y4)); graphics.lineTo((obj.start_x+x4+x5), (obj.start_y+y4+y5)); } } |