※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : miniapp's マウスで操作するSlitScan [diff(332)]

FORKED
  1. // forked from Ctrl's My Way = forked from: マウスで操作するSlitScan
  2. /** forked from: マウスで操作するSlitScan
  3.  * 解説
  4.  * http://miniapp.org/blog/2010/01/15/176/
  5.  *
  6.  * マウスドラッグすると、クリックした付近の時間を早送りしたり、
  7.  * 巻き戻したりします。
  8.  *
  9.  * 上下の線に囲まれた部分が対象範囲です。
  10.  * y方向にドラッグすると、適用範囲を広げられます。
  11.  * 
  12.  * x方向にドラッグすると、早送り or 巻き戻しの量を変化させます。
  13.  * 右方向にドラッグで早送り、左方向で巻き戻しです。
  14.  * 長くドラッグするほど、時間が早くなる or 遅れます。
  15.  * 
  16.  * ガイドの有無はチェックボックスで変えられます
  17.  * 
  18.  * 動画はこちらを使わせて頂きました。
  19.  * YouTube - ムーンウォークからの、、、スライド
  20.  * http://www.youtube.com/watch?v=fWMBIncDQtA
  21.  */
  22. package
  23. {
  24.     //import com.bit101.components.CheckBox;
  25.     import flash.display.Bitmap;
  26.     import flash.display.BitmapData;
  27.     import flash.display.Loader;
  28.     import flash.display.Sprite;
  29.     import flash.events.Event;
  30.     import flash.events.MouseEvent;
  31.     import flash.events.NetStatusEvent;
  32.     import flash.geom.Point;
  33.     import flash.geom.Rectangle;
  34.     import flash.media.SoundMixer;
  35.     import flash.media.SoundTransform;
  36.     import flash.media.Video;
  37.     import flash.net.NetConnection;
  38.     import flash.net.NetStream;
  39.     import flash.net.NetStreamInfo;
  40.     import flash.net.URLRequest;
  41.     import flash.text.TextField;
  42.     import flash.text.TextFieldAutoSize;
  43.     import flash.text.TextFormat;
  44.     
  45.     [SWF(backgroundColor = 0x0, width = 465, height = 465, frameRate = 60)]
  46.     
  47.     public class Main extends Sprite 
  48.     {
  49.         private static const PLAYER_WIDTH:int = 465;
  50.         private static const PLAYER_HEIGHT:int = 465;
  51.         private static const NUM_FRAMES:int = 500;
  52.         private static const MAX_DELAY:int = NUM_FRAMES / 2 - 1;
  53.         private static const PLAY_FRAME:int = NUM_FRAMES / 2;//通常再生させるフレーム番号
  54.         
  55.         public function Main() 
  56.         {
  57.             rotationY = 180;
  58.             x = 465;
  59.             
  60.             Wonderfl.capture_delay( 104 );
  61.             
  62.             for (var i:int = 0; i < NUM_FRAMES; ++i) {
  63.                 frames[i] = new BitmapData(PLAYER_WIDTH, PLAYER_HEIGHT, false, 0x0);
  64.             }
  65.             
  66.             for (var yy:int = 0; yy < PLAYER_HEIGHT; ++yy) {
  67.                 var line:Line = new Line();
  68.                 lines[yy] = line;
  69.             }
  70.             
  71.             loadInfoTf = new TextField();
  72.             var fmt:TextFormat = new TextFormat();
  73.             fmt.size = 16;
  74.             loadInfoTf.defaultTextFormat = fmt;
  75.             loadInfoTf.text = 'start';
  76.             loadInfoTf.textColor = 0xFFFFFF;
  77.             loadInfoTf.autoSize = TextFieldAutoSize.CENTER;
  78.             loadInfoTf.selectable = false;
  79.             loadInfoTf.x = 0;
  80.             loadInfoTf.y = stage.stageHeight - loadInfoTf.height - 10;
  81.             loadInfoTf.width = stage.stageWidth;
  82.             addChild(loadInfoTf);            
  83.             
  84.             displayData = new BitmapData(PLAYER_WIDTH, PLAYER_HEIGHT, false, 0x0)
  85.             display = new Bitmap(displayData);
  86.             guideLayer = new Sprite();
  87.             display.x = guideLayer.x = (stage.stageWidth - display.width) / 2;
  88.             display.y = guideLayer.y = (stage.stageHeight - display.height) / 2;
  89.             addChild(display);
  90.             
  91.             guideTf = new TextField();
  92.             fmt.size = 14;
  93.             guideTf.textColor = 0xffffff;
  94.             guideTf.backgroundColor = 0x0;
  95.             guideTf.autoSize = TextFieldAutoSize.LEFT;
  96.             guideTf.selectable = false;
  97.             guideTf.defaultTextFormat = fmt;
  98.             guideLayer.addChild(guideTf);
  99.             addChild(guideLayer);
  100.             
  101.             //drawGuideCheck = new CheckBox(this, 10, stage.stageHeight - 20, "guide", checkClickHandler);
  102.             //drawGuideCheck.selected = true;
  103.             
  104.             loadVideo("http://picocolon.com/THE SEX PISTOLS - MY WAY.flv");
  105.                         
  106.             stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
  107.             stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
  108.         }
  109.         
  110.         private var index:int = 0;
  111.         private var applyDist:Number;
  112.         
  113.         private var destPoint:Point = new Point();
  114.         private var sourceRect:Rectangle = new Rectangle(00, PLAYER_WIDTH, 1);
  115.         
  116.         private var pressX:Number;
  117.         private var pressY:Number;
  118.         private var mousePressed:Boolean = false;
  119.         
  120.         private var frames:Vector.<BitmapData> = new Vector.<BitmapData>(NUM_FRAMES, true);
  121.         private var lines:Vector.<Line> = new Vector.<Line>(PLAYER_HEIGHT, true);
  122.         
  123.         private var loadInfoTf:TextField;
  124.         
  125.         //private var drawGuideCheck:CheckBox;
  126.         private var guideTf:TextField;
  127.         private var showGuide:Boolean = true;
  128.         
  129.         private var display:Bitmap;
  130.         private var displayData:BitmapData;
  131.         private var guideLayer:Sprite;
  132.         private var videoLayer:Sprite;
  133.         private var netStream:NetStream;//ローカル変数にすると、drawする時にセキュリティエラーが出る
  134.         
  135.         private function checkClickHandler(event:MouseEvent):void 
  136.         {
  137.             showGuide = event.currentTarget.selected;
  138.         }
  139.         
  140.         private function loadVideo(url:String):void
  141.         {
  142.             var netConnection:NetConnection = new NetConnection();
  143.             netConnection.connect(null);
  144.             
  145.             netStream = new NetStream(netConnection);
  146.             netStream.client = {
  147.                 onMetaData:function(args:*):void
  148.                 {
  149.                 }
  150.             };
  151.             netStream.checkPolicyFile = true;
  152.             netStream.play(url);
  153.             
  154.             videoLayer = new Sprite();
  155.             var video:Video = new Video();
  156.             video.width  = PLAYER_WIDTH;
  157.             video.height = PLAYER_HEIGHT;
  158.             video.attachNetStream(netStream);
  159.             videoLayer.addChild(video);
  160.             //addChild(videoLayer);
  161.             
  162.             mousePressed = true;
  163.             
  164.             addEventListener(Event.ENTER_FRAME, function(event:Event):void {
  165.                 var per:Number = Math.ceil(netStream.bytesLoaded * 100 / netStream.bytesTotal);
  166.                 if (per >= 100) {
  167.                     loadInfoTf.text = "now initializing. please wait.";
  168.                     if (index >= PLAY_FRAME) {
  169.                         removeChild(loadInfoTf);
  170.                         removeEventListener(Event.ENTER_FRAME, arguments.callee);
  171.                     }
  172.                 }
  173.                 else {
  174.                     loadInfoTf.text = "loading " + String(per) + "%" + "loaded";
  175.                 }
  176.             });
  177.             
  178.             
  179.             netStream.addEventListener (NetStatusEvent.NET_STATUS , function(event:NetStatusEvent):void {
  180.                 switch(event.info.code) {                    
  181.                     case "NetStream.Play.Start":
  182.                         stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  183.                     break;
  184.                     case "NetStream.Play.Stop":
  185.                         //終わったら最初から開始
  186.                         netStream.seek(0);
  187.                     break;
  188.                 }
  189.             });
  190.         }
  191.         
  192.         
  193.         private function mouseDownHandler(e:MouseEvent = null):void {
  194.             mousePressed = true;
  195.             
  196.             //AutoPlay
  197.             pressX = (Math.floor(Math.random()*(1+465-10))+10);
  198.             pressY = (Math.floor(Math.random()*(1+465-10))+10);
  199.         }
  200.         
  201.         private function mouseUpHandler(e:MouseEvent):void {
  202.             mousePressed = false;
  203.             
  204.             guideTf.visible = false;
  205.             guideLayer.graphics.clear();
  206.         }
  207.         
  208.         private function drawGuide(delay:Number):void {
  209.             guideLayer.graphics.clear();
  210.             guideLayer.graphics.lineStyle(1, 0xFFFFFF, 0.5);
  211.             
  212.             var up:Number = pressY + applyDist;
  213.             guideLayer.graphics.moveTo(0, up);
  214.             guideLayer.graphics.lineTo(PLAYER_WIDTH, up);
  215.             
  216.             var bottom:Number = pressY - applyDist;
  217.             guideLayer.graphics.moveTo(0, bottom);
  218.             guideLayer.graphics.lineTo(PLAYER_WIDTH, bottom);
  219.             
  220.             guideLayer.graphics.moveTo(pressX, pressY);
  221.             guideLayer.graphics.lineTo(guideLayer.mouseX, guideLayer.mouseY);
  222.             
  223.             guideTf.visible = true;
  224.             guideTf.x = guideLayer.mouseX;
  225.             guideTf.y = guideLayer.mouseY - guideTf.textHeight;
  226.             var str:String = '';
  227.             if (delay > 0) {
  228.                 str = '+';
  229.             }
  230.             
  231.             guideTf.text = str + String(delay) + "frame";
  232.         }
  233.         
  234.         private function enterFrameHandler(event:Event):void {
  235.             mouseDownHandler();
  236.             if(mousePressed){
  237.                 var delay:int = (300 - pressX);
  238.                 if (delay > MAX_DELAY) {
  239.                     delay = MAX_DELAY
  240.                 }
  241.                 else if (delay < -MAX_DELAY) {
  242.                     delay = -MAX_DELAY;
  243.                 }
  244.                 
  245.                 applyDist = 200 - pressY;
  246.                 if (applyDist < 0) applyDist *= -1;
  247.                 
  248.                 //if(showGuide)
  249.                     //drawGuide(delay);
  250.             }
  251.             
  252.             update(applyDist, delay);
  253.             
  254.             ++index;
  255.             index %= NUM_FRAMES;
  256.         }
  257.         
  258.         private function update(applyDist:int, delay:int = 0):void {
  259.             frames[index].draw(videoLayer);
  260.             
  261.             for (var yy:int = 0; yy < PLAYER_HEIGHT; ++yy) {
  262.                 var line:Line = lines[yy];
  263.                 sourceRect.y = yy;
  264.                 destPoint.y = yy;
  265.                 
  266.                 if (mousePressed) {
  267.                     var dist:Number = pressY - yy;
  268.                     if (dist < 0) dist *= -1;
  269.                     
  270.                     if(dist <= applyDist){
  271.                         var per:Number = dist / applyDist;
  272.                         line.changeDelayDirect(delay * (1 - per));
  273.                     }
  274.                     else {
  275.                         line.changeDelay(0);
  276.                     }
  277.                 }
  278.                 else {
  279.                     line.changeDelay(0);
  280.                 }
  281.                 
  282.                 var targetFrame:int = (index + PLAY_FRAME + line.delay) % NUM_FRAMES;
  283.                 if (targetFrame < 0) {
  284.                     targetFrame = NUM_FRAMES + targetFrame;
  285.                 }
  286.                 
  287.                 displayData.copyPixels(frames[targetFrame], sourceRect, destPoint);
  288.             }
  289.         }
  290.     }
  291. }
  292. import org.libspark.betweenas3.BetweenAS3;
  293. import org.libspark.betweenas3.tweens.ITween;
  294. import org.libspark.betweenas3.easing.Linear;
  295. import org.libspark.betweenas3.easing.Bounce;
  296. import org.libspark.betweenas3.easing.Elastic;
  297. class Line { 
  298.     
  299.     public var delay:int = 0;
  300.     private var t:ITween;
  301.     private var prev:int = 0;
  302.     
  303.     public function changeDelayDirect(value:int):void {
  304.         if(t && t.isPlaying) t.stop();
  305.         delay = value;
  306.         prev = value;
  307.     }
  308.     
  309.     public function changeDelay(value:int):void {
  310.         if (prev != value) {
  311.             if(t && t.isPlaying) t.stop();
  312.             //t = BetweenAS3.tween(this, { delay: value }, null, 1.5, Bounce.easeOut);
  313.             t = BetweenAS3.tween(this, { delay: value }, null3, Elastic.easeOut);
  314.             //t = BetweenAS3.tween(this, { delay: value }, null, 0.5, Linear.easeNone);
  315.             t.play();
  316.             prev = value;
  317.         }
  318.     }
  319. }
noswf
Get Adobe Flash Player