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

PaperVision3D × YouTube Player API 3.0

PaperVision3D × YouTube Player API 3.0
* 
* MovieMaterialはBitmapData.draw()しているので
* セキュリティSandboxエラーになってしまいました。
* DOWNLOADボタンから落としたファイルを再生するしかない。。。
*
* - PV3D BasicView
* - PV3D Plane
* - PV3D MovieMaterial
* - YouTube API 3.0
*
* [Movie]
* KNOTS DANCE 002 (http://www.youtube.com/watch?v=Z3LUhwgGPxw)
Get Adobe Flash player
by nijitaro 11 Jan 2010
/**
 * Copyright nijitaro ( http://wonderfl.net/user/nijitaro )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/g2Ve
 */

/**
 * PaperVision3D × YouTube Player API 3.0
 * 
 * MovieMaterialはBitmapData.draw()しているので
 * セキュリティSandboxエラーになってしまいました。
 * DOWNLOADボタンから落としたファイルを再生するしかない。。。
 *
 * - PV3D BasicView
 * - PV3D Plane
 * - PV3D MovieMaterial
 * - YouTube API 3.0
 *
 * [Movie]
 * KNOTS DANCE 002 (http://www.youtube.com/watch?v=Z3LUhwgGPxw)
 */
package {
    
    import flash.display.*;
    import flash.events.*;
    import flash.geom.Rectangle;
    import flash.system.Security;

    import org.papervision3d.materials.MovieMaterial;
    import org.papervision3d.objects.primitives.Plane;
    import org.papervision3d.view.BasicView;
    
    [SWF(backgroundColor="0x000000", frameRate="50")]
    /* --------------------------------------------------
    [MEMO]
        SpriteではなくBasicViewをextendsする。BasicViewはSpriteのサブクラス
    -------------------------------------------------- */
    public class PV3DYouTube extends BasicView {
		// Planeを使う
        private var plane:Plane;
		
        // コンストラクタ
        public function PV3DYouTube ()
        {
            Security.allowDomain("s.ytimg.com");
            // materialをMovieMaterialから作成
            var material:MovieMaterial = new MovieMaterial(new YoutubePlayer("Z3LUhwgGPxw"), false, true);
            // マテリアルの描画領域を指定する
            material.rect = new Rectangle(0,0,320,180);
            // 両面にテクスチャを貼る
            material.doubleSided = true;
            // テクスチャの歪み防止
            material.precise = true;
			
            // 新規Planeオブジェクトを作成
            plane = new Plane( material, 800, 450, 16, 16 );
            
            // scene(予めBasicViewで定義されている表示エリア)に作成したplaneを追加する
            scene.addChild(plane);
            
            // cameraのズームを80%に指定
            camera.zoom = 80;
            
            // BasicViewの描画を開始する
            startRendering();
        }
        
        /* --------------------------------------------------
        [MEMO]
            BasicViewのEvent.ENTER_FRAMEのようなもの。
            これをoverrideしてフレーム毎の挙動を定義する。
        -------------------------------------------------- */
        override protected function onRenderTick (event :Event = null):void
        {
            /* --------------------------------------------------
            [MEMO]
                Papervision3dは左手座標系。
                左手をGoodの状態(親指を立てる)にして
                親指を正の方向に向けた際の、4本指指の巻き方向がそれぞれ回転方向となる
            -------------------------------------------------- */
            // Y軸回転はyaw
            plane.yaw(2);
            /* --------------------------------------------------
            [MEMO]
                BasicViewのonRenderTickも実行する。
                これがないと、onRenderTickが単純に上書きされてしまうので、
                もともともonRenderTickの機能を果たさない。
            -------------------------------------------------- */
            super.onRenderTick(event);
        }
    }
}
    
import flash.display.*;
import flash.events.Event;
import flash.net.URLRequest;
import flash.system.Security;

class YoutubePlayer extends Sprite {
    private var player:Object;
    private var loader:Loader;
    private var _videoID:String;
    
    /// init
    public function YoutubePlayer(videoID:String) {
        loader = addChild(new Loader()) as Loader;
        loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit, false, 0, true);
        loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
        _videoID = videoID;
    }
    /// events
    private function onLoaderInit(event:Event):void {
        player = loader.content;
        player.addEventListener("onReady", onPlayerReady);
    }
    private function onPlayerReady(event:Event):void {
        player.setSize(320, 180);
        player.loadVideoById(_videoID, 0, "low");
    }
}