topical media & game development

talk show tell print

#display-bounce.mx

#display-bounce.mx [swf] flex


  <?xml version="1.0"?>
  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  xmlns:ae="*" 
  paddingLeft="0" paddingTop="0" paddingBottom="0" paddingRight="0"
  backgroundColor="0x000000"
  layout="absolute"
  initialize = "init();"
  >
  <ae:component_screen id="display"/>
  

script


  <mx:Script>
  <![CDATA[
  import mx.collections.ArrayCollection;
  import mx.events.CuePointEvent;
  import mx.controls.videoClasses.CuePointManager;
  [Bindable] public var first:String = "../assets/clips/tube/balloon.flv";
  [Bindable] public var movie:String = first;
  
  [Bindable] private var arrColl:ArrayCollection = new ArrayCollection();
  [Bindable] private var state:uint = 0;
  private var off:int = 0;
  
  
bounce
[Bindable] private var radius:uint = 100; [Bindable] private var ball:Shape = new Shape(); [Bindable] private var square:Shape = new Shape(); [Bindable] private var vx:Number; [Bindable] private var vy:Number; [Bindable] private var bounce:Number = -0.999; [Bindable] private var gravity:Number = .0001; private function init() : void { input.text = first; myVid.source = movie; off = 1; var h:Number = systemManager.stage.stageHeight; var w:Number = systemManager.stage.stageWidth; //radius = ( h + w ) / 14; square.graphics.beginFill(0); square.graphics.drawRect(0, 0, w,h); //square.x = 400; //square.y = 400; ball.graphics.beginFill(0); ball.graphics.drawCircle(0, 0, radius); ball.x = 400; ball.y = 300; vx = Math.random() * 30 - 5; vy = -20; //myVid.addChild(square); myVid.addChild(ball); myVid.mask = ball; addEventListener(Event.ENTER_FRAME, frame); }

camera


  import flash.media.Camera;
  private var camera:Camera; // = Camera.getCamera();
  
  private function attach(v:Object) : void {
      camera = Camera.getCamera();
      myVid.attachCamera(camera);
    }
  

frame(s)


  
  private function frame(event:Event):void {
  var h:Number = systemManager.stage.height;
  var w:Number = systemManager.stage.width;
  var dx:Number = Math.random() * 2 - 1;
  var dy:Number = Math.random() * 2 - 1 ;
  vx += dx; vy += dy;
  var s:Number = w/800;
                            ball.scaleX = w/800;
                            ball.scaleY = h/600;
                            vy += gravity;
                            ball.x += vx;
                            ball.y += vy;
                            var left:Number = 0;
                            var right:Number = myVid.width;
                            var top:Number = 0;
                            var bottom:Number = myVid.height;
                            
                            if(ball.x + radius > right)
                            {
                                    ball.x = right - radius;
                                    vx *= bounce;
                            }
                            else if(ball.x - radius < left)
                            {
                                    ball.x = left + radius;
                                    vx *= bounce;
                            }
                            if(ball.y + radius > bottom)
                            {
                                    ball.y = bottom - radius;
                                    vy *= bounce;
                            }
                            else if(ball.y - radius < top)
                            {
                                    ball.y = top + radius;
                                    vy *= bounce;
                            }
                    // myVid.mask = ball;
                    }
                    
  

hide


  
  private var peep:uint = 0;
  
  private function hide(video:Object):void {
  if (peep == 0) {
  myVid.removeChild(ball);
  // myVid.addChild(square);
  myVid.mask = null;
  peep = 1;
  // tileList.visible = false;
  // arrColl.removeAll();
  // tileList.invalidateList();
  // removeEventListener(Event.ENTER_FRAME, frame);
  }
  else {
  peep = 0;
  // tileList.visible = true;
  //myVid.removeChild(square);
  myVid.addChild(ball);
  myVid.mask = ball;
  addEventListener(Event.ENTER_FRAME, frame);
  }
  }
  
  

cuepoint(s)


  [Bindable] private var cuepoints:Array = [
   {name:'cue 0', time:1.00},
   {name:'cue 1', time:2.00},
   ];
  [Bindable] private var info:String = "cue -";
  
  [Bindable] private var show:uint = 0;
  
  

clear


  
  private function clear(video:Object):void {
  if (show == 0) {
  show = 1; tileList.visible = false;
  arrColl.removeAll();
  tileList.invalidateList();
  }
  else { show = 0; tileList.visible = true; }
  }
  
  

select


  
  private function select(event:Event):void {
  myVid.close();
  tileList.visible = false;
  arrColl.removeAll();
  tileList.invalidateList();
  tileList.visible = true;
  show = 0;
  movie = input.text;
  myVid.source = movie;
  myVid.cuePoints = cuepoints;
  story.text = movie; 
  myVid.play();
  off = 0;
  state = 0;
  }
  
  

cue(s)


  
  private function cue(evt:Object):void {
  if (show == 1) { show = 0; tileList.visible = true; }
  var pad:String = "                     ";
  var bm:Bitmap = copy(myVid as DisplayObject);
  var time:String = format(myVid.playheadTime);
  
  if (state < 2) info = cuepoints[state].name;
  if (state == 0) { story.text = "click ! to annotate ..."; }
  else if (state == 1) { story.text = "... "; }
  else { off = 1; story.text = ""; info="cue " + state; }
  
  arrColl.addItem({pad:pad, bitmap:bm, info:info, time:time});
  state += 1;
  if (off == 1) story.text = "";
  }
  
  

copy / format


  
  private function copy(source:DisplayObject):Bitmap {
  var bmd:BitmapData = new BitmapData(source.width, source.height);
  bmd.draw(source);
  return new Bitmap(bmd);
  }
  
  private function format(value:Number):String{
      var sec:int = (value * 60) / 60; 
      var mil:int = (value - sec) * 100; 
      var result:String = sec.toString() + "." + mil.toString();
      return result;
     }
  
  ]]>
  </mx:Script>
  

display


  <mx:VideoDisplay id="myVid" source="" height="100%" width="100%" autoPlay="false"
  cuePointManagerClass="mx.controls.videoClasses.CuePointManager"
  cuePoint="cue(event)"
  />
  <mx:HBox top="5" right="3">
  <mx:Label text="{movie} / {state}" color="silver" top="10" right="20"/>
  <mx:Label color="gray" text="@" click="attach(myVid);"/>
  </mx:HBox>
  <mx:HBox top="5" left="20">
  <mx:Label color="gray" text="*" click="hide(myVid);"/>
  <mx:Label text="{format(myVid.playheadTime)} / {info}" color="white" top="10" left="20"/>
  </mx:HBox>
  <mx:Label id="story" text="" color="white" top="75" left="100" fontSize="20"/>
  

controls


  <mx:HBox left="20" bottom="10">
  <mx:Button color="white" borderColor="0" fillAlphas="[0,0]" label="!" click="cue(myVid);"/>
  <mx:TextInput borderColor="gray" color="silver" backgroundAlpha="0"  width="275" id="input" text="" enter="select(event);"/>
  <mx:Button color="white" borderColor="0" fillAlphas="[0,0]" label="[!]" click="select(event);"/>
  <mx:Button color="silver" borderColor="0" fillAlphas="[0,0]" label="clear" click="clear(myVid);"/>
  </mx:HBox>
  <mx:HBox right="5" 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:Label color="gray" text="#" click="display.toggle();"/>
  </mx:HBox>
  
  

tile(s)


  
  <mx:TileList
  top="50" right="10" 
  backgroundAlpha="0"
  borderColor="0"
  borderThickness="0" 
  id="tileList"
  columnCount="1" dataProvider="{arrColl}"
  width="170"
  height="{myVid.height - 100 }"
  verticalScrollPolicy="off">
  <mx:itemRenderer>
  <mx:Component>
  <mx:HBox right="0" paddingBottom="0" paddingTop="0">
  <mx:Text textAlign="right">
  <mx:htmlText>
  &lt;br;\ &gt;
  name: {data.info}
  time: {data.time}
  </mx:htmlText>
  </mx:Text>
  <mx:HBox right="0">
  <mx:Image source="{data.bitmap}" toolTip="{data.time}"
  maintainAspectRatio="false"
  scaleX="0.07" scaleY="0.07" />
  </mx:HBox>
   </mx:HBox>
  </mx:Component>
    </mx:itemRenderer>
  </mx:TileList>
  
  </mx:Application>
  


(C) Æliens 27/08/2009

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.