topical media & game development

talk show tell print

basic-paint.mx

basic-paint.mx (swf ) [ flash ] flex


  <?xml version="1.0"?>
  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  paddingLeft="0" paddingTop="0" paddingBottom="0" paddingRight="0"
  initialize="init()"
  layout="absolute">
  <mx:Script>
   <![CDATA[
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.StageDisplayState;
    import mx.managers.SystemManager;
    
    private var painting:Sprite; 
  
  

handler(s)


  private function toggle():void {
     try {
     switch (systemManager.stage.displayState) {
       case StageDisplayState.FULL_SCREEN:
            systemManager.stage.displayState = StageDisplayState.NORMAL;
            break;
       default: systemManager.stage.displayState = StageDisplayState.FULL_SCREEN;
       break;
       }
     } catch (err:SecurityError) {
                          // ignore
       }
    }
  

video(s)


    [Bindable]
    private var index:uint = 0;
    private var max:uint = 4;
    public var video:Array = [
        "../assets/clips/blip/rgbxyz.flv",
        "../assets/clips/shout/strangest.flv",
        "../assets/clips/tube/baby-laugh.flv",
        "../assets/clips/tube/strings.flv"
    ];
    [Bindable]
    public var source:String = video[index];
  
               private var new_size_influence:Number = 0.5;
                  private var mid_point_push:Number = .75;
                  private var max_line_width:Number = (Math.random() * 10) + 10;
                  //private var info.visible:Boolean = false;
                  private var curves:Array;
                  private var start_x:Number;
                  private var start_y:Number;
                  private var mid_x:Number;
                  private var mid_y:Number;
                  private var end_x:Number;
                  private var end_y:Number;
                  
                  private var with_wii:int = 0;
                  
                  private var distance:Number;
                  private var new_size:Number;
                  private var parity:Boolean;
                  private var size:Number = 0;
                  private var color:uint = 0x000000;
                  private var aggression:Number = 5.4; // 12.4;//3.4;
                  
  

init(s)


   
                   private function init():void
                  {
                      painting = new object_ax_paint();
                      canvas.addChild(painting);
                          //painting.graphics.lineStyle(1);
                          
                          start_x = mid_x = end_x = stage.stageWidth / 2;
                          start_y = mid_y = end_y = stage.stageHeight / 2;
                          
                          //stage.addEventListener(Event.ENTER_FRAME, paint);
                          //stage.addEventListener(MouseEvent.CLICK, onMouseClick); 
                          //addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
                          //addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
                  }
                  
  

painter


  
          private function onMouseDown(event:MouseEvent):void
                  {
                          canvas.graphics.moveTo(mouseX, mouseY);
                          addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
                  }
                  
                  private function onMouseUp(event:MouseEvent):void
                  {
                          removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
                  }
                  
                  private function onMouseMove(event:MouseEvent):void
                  {
                          canvas.graphics.lineTo(mouseX, mouseY);
                          //paint(event);
                  }
  
                  private function onMouseClick(event:MouseEvent):void{
                          color = Math.random() * 0xFFFFFF;
                          //txt.text = "Color: 0x" + color.toString();
                  }
                  
                                  public function paint(event:Event):void {
                          //counter++;
                          //txt.text = counter.toString();
                          
                          //if (with_wii == 0) {
                          //vpX = mouseX;
                          //vpY = mouseY;
                          //}
                          
                          //AE
                          //graphics.lineTo(mouseX, mouseY);
                          
                          
The code for the paint function was ported and adapted from: "Splatter", by Stamen Design stamen.com/projects/splatter

  
                          
                          mid_x = ((end_x - start_x) * (1 + mid_point_push)) + start_x;
                          mid_y = ((end_y - start_y) * (1 + mid_point_push)) + start_y;
                          start_x = end_x;
                          start_y = end_y;
                          //end_x = vpX;// = mouseX;
                          //end_y = vpY;// = mouseY;
                          end_x = mouseX;
                          end_y = mouseY;
                          distance = Math.sqrt(Math.pow((end_x - start_x), 2) + Math.pow((end_y - start_y), 2));
                          new_size = max_line_width / distance;
                          size = aggression*new_size;//(new_size_influence * new_size) + ((1 - new_size_influence) * size);
                          splat(canvas.graphics, start_x, start_y, end_x, end_y, mid_x, mid_y, size);
                          parity = false;
                          /*
                          _parent.new_size_influence += ((Math.random() * 0.1) - 0.05);
                          _parent.mid_point_push += ((Math.random() * 0.1) - 0.05);
                          _parent.max_line_width += ((Math.random() * 4) - 2);
  			*/
                          new_size_influence += ((Math.random() * 0.1) - 0.05);
                          mid_point_push += ((Math.random() * 0.1) - 0.05);
                          max_line_width += ((Math.random() * 4) - 2);
                  }
                  
                  private function splat(obj:Graphics, x1:Number, y1:Number, x2:Number, y2:Number, x3:Number, y3:Number, d:Number):void        {
                          //var obj:Graphics = painting.graphics;
                          
                          obj.lineStyle(d, color, 100);
                          //txt.text = d.toString();
                          obj.moveTo(x1, y1);
                          obj.curveTo(x3, y3, x2, y2);
                          //curves.push([x1, y1, x3, y3, x2, y2, d]);
                          
                          // splotch
                          var dd:Number = Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2));
                  
                           for (var i:uint = 0; i<Math.floor(5*Math.pow(Math.random(), 4)); i++) {
                          // positioning of splotch varies between ±4dd, tending towards 0
                                  var splat_range:Number = 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 = d*(0.5+Math.random());
                                  obj.lineStyle(d_, color, 100);
                                  obj.moveTo((x1+x4), (y1+y4));
                                  obj.lineTo((x1+x4+x5), (y1+y4+y5));
                                  //curves.push([(x1+x4), (y1+y4), (x1+x4+x5), (y1+y4+y5), (x1+x4+x5), (y1+y4+y5), d_]);
                          
                           }
                          //addChild(obj); //?AE
                  }
   
  
  

click


    private function click ( event:MouseEvent ):void
    {
        index += 1; if (index > (max-1)) index = 0;
        //myVid.stop();
        source = video[index]; // bindable
        //myVid.play();
    }
  
  ]]>
  </mx:Script>
  

display


  <mx:Canvas id="canvas"  height="100%" width="100%" />
  

controls


  <mx:HBox left="20" bottom="10">
  <mx:Button color="white" right="20" borderColor="0" fillAlphas="[0, 0]" label="!" click="click(event);"/>
  </mx:HBox>
  <mx:HBox right="20" bottom="10">
  
<mx:Button color="gray" borderColor="0" fillAlphas="[0, 0]" label=">" click="myVid.play();"/> <mx:Button color="gray" borderColor="0" fillAlphas="[0, 0]" label="||" click="myVid.pause();"/> <mx:Button color="gray" borderColor="0" fillAlphas="[0, 0]" label="_" click="myVid.stop();"/> <mx:Button color="gray" borderColor="0" fillAlphas="[0, 0]" label="full" click="toggle();"/> </mx:HBox> </mx:Application>


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> <script type="text/javascript"> _uacct = "UA-2780434-1"; urchinTracker(); </script>