In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

前回コードから動画リストの繰り返し再生機能を追加して田舎動画再生

Get Adobe Flash player
by siouxcitizen 10 Mar 2013
/**
 * Copyright siouxcitizen ( http://wonderfl.net/user/siouxcitizen )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/aF3a
 */

/**
 * Youtube動画を自分作業用に連続再生
 * 動画リストをリピート再生する「Repeat」ボタンを追加しました
 * 
 * Youtubeの動画IDをベタ書きで配列に設定して連続再生しています
 * Youtubeにあった自分の田舎動画のリストを連続再生しています
 * 
 */
package {
    
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent
    import flash.net.URLRequest;
    import flash.system.Security;
    import flash.text.TextField;
    import flash.text.TextFieldType;

    [SWF(backgroundColor="0x000000", frameRate="30", width="640", height="400")]
    public class Player extends Sprite {
        
        private var _player:Object;
        private var _loader:Loader;
        private var _movieIdListIndex:int = 0;
        private const _defaultMovieIdList:Array = [
            "soDjDV-DjHE",    //ひとっ旅豊岡
            "xSRmhiMS78Y",    //城崎スケッチ(ダイジェスト) 
            "b6Svvc8W_Qs",    //【弁当忘れても傘忘れるな】兵庫県豊岡市出石町 
            "A04la9SBjcs",    //但東スケッチ(ダイジェスト) 
            "nkNIKRHhNuw",    //神鍋高原 
            "wUd8XvvY1vM",    //全但バス PV  
            "9kXTp98HQoc"     //竹野浜 竹野海岸 竹野浜海水浴場 
        ];
        private var _movieIdList:Array = [
            "soDjDV-DjHE",    //ひとっ旅豊岡
            "xSRmhiMS78Y",    //城崎スケッチ(ダイジェスト) 
            "b6Svvc8W_Qs",    //【弁当忘れても傘忘れるな】兵庫県豊岡市出石町 
            "A04la9SBjcs",    //但東スケッチ(ダイジェスト) 
            "nkNIKRHhNuw",    //神鍋高原 
            "wUd8XvvY1vM",    //全但バス PV  
            "9kXTp98HQoc"     //竹野浜 竹野海岸 竹野浜海水浴場 
        ];
        private var _previousBtn : CustomButton; //「Previoius」ボタン 前Youtube動画に遷移
        private var _forwardBtn : CustomButton; //「Forward」ボタン 後Youtube動画に遷移
        private var _defaultListBtn : CustomButton; //「Default List」ボタン デフォルトの動画再生リストを設定します
        private var _shuffleListBtn : CustomButton; //「Shuffle List」ボタン ランダムな動画再生リストを設定します
        private var _repeatBtn : CustomButton; // リピート再生機能On Off切り替え
        private var _repeatStateDisp : TextField;// リピー再生するかどうか表示用
        private var _repeatOn : Boolean; // リピート再生するかどうか
        
        /// init
        public function Player() {
            _loader = addChild(new Loader()) as Loader;
            _loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit, false, 0, true);
            _loader.x = 10;
            _loader.y = 10;
            //_loader.load(new URLRequest("http://www.youtube.com/v/NMNgbISmF4I?version=3&enablejsapi=1")); //Youtubeコントローラー付き 最初はといあえずのIdを設定
            _loader.load(new URLRequest("http://www.youtube.com/v/NMNgbISmF4I?version=3")); //Youtubeコントローラー付き 最初はといあえずののIdを設定
        }
        
        
        /// events
        private function onLoaderInit(event:Event):void {
            _loader.content.addEventListener("onReady", onPlayerReady);
            _loader.content.addEventListener("onError", onPlayerError);
            _loader.content.addEventListener("onStateChange", onPlayerStateChange);
            _loader.content.addEventListener("onPlaybackQualityChange", onVideoPlaybackQualityChange);
        }
        
        private function onPlayerReady(event:Event):void {
            // Event.data contains the event parameter, which is the Player API ID 
            // Once this event has been dispatched by the _player, we can use
            // cueVideoById, loadVideoById, cueVideoByUrl and loadVideoByUrl
            // to load a particular YouTube video.
            _player = _loader.content;

            _player.setSize(640, 360);
            //_player.setSize(352, 230);

            _previousBtn = new CustomButton("Previous");
            _previousBtn.x = 150;
            _previousBtn.y = 410;
            _previousBtn.addEventListener(MouseEvent.MOUSE_DOWN,onPreviousBtnDown);
            addChild(_previousBtn);

            _forwardBtn = new CustomButton("Foward");
            _forwardBtn.x = 400;
            _forwardBtn.y = 410;
            _forwardBtn.addEventListener(MouseEvent.MOUSE_DOWN,onForwardBtnDown);
            addChild(_forwardBtn);

            _defaultListBtn = new CustomButton("Default List");
            _defaultListBtn.x = 150;
            _defaultListBtn.y = 440;
            _defaultListBtn.addEventListener(MouseEvent.MOUSE_DOWN,onDefaultListBtnDown);
            addChild(_defaultListBtn);

            _shuffleListBtn = new CustomButton("Shuffle List");
            _shuffleListBtn.x = 400;
            _shuffleListBtn.y = 440;
            _shuffleListBtn.addEventListener(MouseEvent.MOUSE_DOWN,onShuffleListBtnDown);
            addChild(_shuffleListBtn);

            _repeatOn = false;

            _repeatBtn = new CustomButton("Repeat");
            _repeatBtn.x = 150;
            _repeatBtn.y = 480;
            _repeatBtn.addEventListener(MouseEvent.MOUSE_DOWN,onRepeatBtnDown);
            addChild(_repeatBtn);

            _repeatStateDisp = new TextField();
            _repeatStateDisp.text = "REPEAT OFF";
            _repeatStateDisp.width = 130;
            _repeatStateDisp.height = 18;
            _repeatStateDisp.x = 400;
            _repeatStateDisp.y = 485;
            _repeatStateDisp.border = true;
            _repeatStateDisp.borderColor = 0xFFFFFF;
            _repeatStateDisp.background = true;
            _repeatStateDisp.backgroundColor = 0x99DDFF;
            _repeatStateDisp.type = TextFieldType.INPUT;
            //_repeatStateDisp.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
            addChild(_repeatStateDisp);

            //_player.loadVideoById("NMNgbISmF4I", 0, "default"); //Crazy
            //_player.loadVideoById("qfNmyxV2Ncw", 0, "default"); //Cryin'
            //_player.loadVideoById("CBTOGVb_cQg", 0, "default"); //Ange
            //ect...
            _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //動画リスト最初の動画を再生
        }

        //「Default List」ボタン押下処理 デフォルトの動画再生リストを設定します
        private function onDefaultListBtnDown(event:MouseEvent):void {
            _movieIdList = _defaultMovieIdList.slice();
            _movieIdListIndex = 0;
            _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default");
        }

        //「Shuffle List」ボタン押下処理 ランダムな動画再生リストを設定します
        private function onShuffleListBtnDown(event:MouseEvent):void {
            _movieIdList = shuffle(_defaultMovieIdList);
            _movieIdListIndex = 0;
            _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default");
        }

        //「Previoius」ボタン押下処理 Youtube動画リストの前動画に遷移
        private function onPreviousBtnDown(event:MouseEvent):void {
            if (_movieIdListIndex > 0) { //動画リストの最前列でない場合は動画を1つもどしてプレイ開始
                _movieIdListIndex = _movieIdListIndex - 1;
                _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //配列インデックスで指定して曲再生
            } else if (_movieIdListIndex == 0) {
                _movieIdListIndex = _movieIdList.length - 1 //動画リストが先頭の場合は動画リストの最後尾へ
                _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //配列インデックスで指定して曲再生
            }
        }

        //「Forward」ボタン押下処理 Youtube動画リストの次動画に遷移
        private function onForwardBtnDown(event:MouseEvent):void {
            if (_movieIdList.length - 1 > _movieIdListIndex) { //動画リストの最後列でない場合は動画を1つすすめてプレイ開始
                _movieIdListIndex = _movieIdListIndex + 1;
                _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //配列インデックスで指定して曲再生
            } else if (_movieIdListIndex == _movieIdList.length - 1) {
                _movieIdListIndex = 0 //動画リストが最後尾の場合は動画リストの先頭へ
                _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //配列インデックスで指定して曲再生
            }
        }

        //「Rpeat」ボタン押下処理 Youtube動画リストを繰り返し再生するかどうか設定します
        private function onRepeatBtnDown(event:MouseEvent):void {
            if (_repeatOn) { //動画リストの最後列でない場合は動画を1つすすめてプレイ開始
                _repeatOn = false;
                _repeatStateDisp.text = "REPEAT OFF";
            } else {
                _repeatOn = true;
                _repeatStateDisp.text = "REPEAT ON";
            }
        }

        //private function onSearchBtnDown(event:MouseEvent):void {
        //    //encodeURIComponent()を使うことによって、#や日本語にも対応
        //    _urlLoader.load(new URLRequest(APIURL + encodeURIComponent(_searchBox.text)));
        //    if (_movieIdList.lenght > 0) { //動画リストが存在する場合はプレイ開始
        //        _movieIdListIndex = 0;
        //        _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default"); //1曲目再生 うまく動いてない???
        //    }
        //}

        private function onPlayerError(event:Event):void {
            // Event.data contains the event parameter, which is the error code
        }
        
        private function onPlayerStateChange(event:Event):void {
            // Event.data contains the event parameter, which is the new _player state
            //プレイヤーの状態を判定
            //未開始(-1)、終了(0)、再生中(1)、一時停止中(2)、バッファリング中(3)、頭出し済み(5)

            if (Object(event).data == "0") { //動画が終了した場合
                _movieIdListIndex++;
                //動画IDリストを超えた場合、かつREPEAT機能有効の場合は動画リストのインデックスを0にもどして再生
                //動画IDリストを超えた場合、かつREPEAT機能無効の場合は動画再生を停止
                if(_movieIdListIndex > _movieIdList.length - 1) {
                    //REPEAT機能有効の場合
                    if(_repeatOn) {
                        _movieIdListIndex = 0; 
                    //REPEAT機能無効の場合
                    } else {
                        return;
                    }
                }

                _player.loadVideoById(_movieIdList[_movieIdListIndex], 0, "default");
            }
        }
        
        private function onVideoPlaybackQualityChange(event:Event):void {
            // Event.data contains the event parameter, which is the new video quality
        }
        
        private function shuffle(data:Array):Array {
            var temp:Array = data.slice();
            var dest:Array = new Array();
 
            while (temp.length > 0) {
                var index:int = Math.random() * temp.length;
                dest.push(temp[index]);
                temp.splice(index, 1);
            }
 
            return dest;
        }
    }
    
}

import flash.display.*;
import flash.system.*;
import flash.text.*;
//カスタムボタン
class CustomButton extends SimpleButton {
    private var btnName : String = "";//ボタン名
    private var btnNo : int = 0;//ボタン番号
    //コンストラクタ    
    public function CustomButton(label:String="",no:int=0) {
        btnName = label;
        btnNo = no;
        //状態
        upState = makeSprite(label,0x99DDFF);
        overState = upState;
        downState = makeSprite(label,0x0000FF);
        hitTestState = upState;
    }
    public function getBtnName():String {
        return btnName;
    }
    public function getBtnNo():int {
        return btnNo;
    }
    //ボタン用スプライト作成
    private function makeSprite(text:String,color:uint):Sprite{
        //ボタン用ラベル作成
        var label : TextField = new TextField();
        label.text = text;
        label.autoSize = TextFieldAutoSize.CENTER;
        label.selectable = false;
        label.x = 30;
        label.y = 0;

        //ボタン用スプライト作成
        var sp:Sprite = new Sprite();
        sp.graphics.beginFill(color);
        sp.graphics.drawRoundRect(0, 0, 170, 25, 10);
        sp.graphics.endFill();
        sp.alpha = 0.8;            
        sp.addChild(label);
        //ラベル用フォーマット設定
        var format:TextFormat=new TextFormat();
        format.font = "Courier New";
        format.bold = true;
        format.size = 15;
        label.setTextFormat(format);
        return sp;
    }
}