Jackson Pollock – From AS2 to AS3

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.

Get Adobe Flash player

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));
    }
}
Posted toActionScript Flash Generative Art