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

forked from: [PV3D][BetweenAS3] Time Remap Demo

【 BetweenAS3 を使ってタイムリマップ 】
*
* トゥイーンの一部分の微少時間を拡大し、動きに緩急をつける
* 技術的な解説は次の記事で ↓ 
* http://clockmaker.jp/blog/2009/07/betweenas3/
Get Adobe Flash player
by hacker_opanznbb 16 Jul 2009
  • Forked from clockmaker's [PV3D][BetweenAS3] Time Remap Demo
  • Diff: 1
  • Related works: 11
  • Talk

    joo at 25 Jul 2009 10:27
    BeTweenAS3 を PV3Dとともに具現した例題たちはどうしてずっと下のような 間違いが出るか知れないです. 一日中検索して見たが頭だけ痛いですね手伝ってください TypeError: Error #1009: null 客体参照の速成やメソッドにアクセスすることができません. at org.libspark.betweenas3.targets.single.display::DisplayObjectTweenTarget/setSourceValue() at org.libspark.betweenas3.factories::StandardSingleTweenTargetFactory/create() at org.libspark.betweenas3::BetweenAS3$/tween() at Main()
    Embed
/**
 * Copyright hacker_opanznbb ( http://wonderfl.net/user/hacker_opanznbb )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/5P5B
 */

// forked from clockmaker's [PV3D][BetweenAS3] Time Remap Demo
/**
 * 【 BetweenAS3 を使ってタイムリマップ 】
 *
 * トゥイーンの一部分の微少時間を拡大し、動きに緩急をつける
 * 技術的な解説は次の記事で ↓ 
 * http://clockmaker.jp/blog/2009/07/betweenas3/
 */
package {
    import flash.display.*;
    import flash.events.*;
    import org.papervision3d.core.proto.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.materials.special.CompositeMaterial;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.view.BasicView;
    import org.libspark.betweenas3.BetweenAS3;
    import org.libspark.betweenas3.tweens.ITween;
    import org.libspark.betweenas3.easing.*;
    
    public class Main extends BasicView { 
        // オブジェクトの個数
        static private const OBJ_NUM :int = 20;
        
        public var rot:Number = 0; // カメラの円運動用
        public var totalTween:ITween; // 再生制御用
        
        public function Main() {
            // Flashの初期設定
            stage.quality = StageQuality.MEDIUM;
            stage.frameRate = 60;
            
            // pv3dの初期設定
            viewport.opaqueBackground = 0x0;
            camera.focus = 200;
            
            // ベースのトゥイーン生成
            var baseTween:ITween;
            
            // カメラの動きをTweenで作る
            baseTween = BetweenAS3.parallel(
                BetweenAS3.tween(this, { rot:0 }, { rot:135 }, 7, Cubic.easeInOut),
                BetweenAS3.tween(camera, { y:400, zoom:4 }, { y:-100, zoom:1 }, 6, Cubic.easeInOut)
            );
            
            for (var i:int = 0; i < OBJ_NUM; i++) {
                // キューブ
                var mt:CompositeMaterial = new CompositeMaterial();
                mt.addMaterial( new ColorMaterial(0x0, 0.6) );
                mt.addMaterial( new WireframeMaterial(0xFF0000) );
                var cube:Cube = scene.addChild(new Cube(new MaterialsList( { all:mt } ), 100, 100, 100)) as Cube;
                
                // 座標
                cube.x = 1500 * Math.random() - 750;
                cube.z = 1500 * Math.random() - 750;
                
                // 秒数
                var sec:Number = 2 * Math.random() + 3;
                
                // 基礎となるTweenを作る
                baseTween = BetweenAS3.parallel(
                    BetweenAS3.tween(cube, { y:50 }, { y:2000 }, sec, Bounce.easeOut),
                    baseTween
                );
            }
            
            // お待ちかね! BetweenAS3によるタイムリマップ
            // [Step.1] まずはTweenを切り出す
            var tw1:ITween = BetweenAS3.slice(baseTween, 0.0, 0.4, true);
            var tw2:ITween = BetweenAS3.slice(baseTween, 0.4, 0.45, true);
            var tw3:ITween = BetweenAS3.slice(baseTween, 0.45, 1.0, true);
            
            // [Step.2] Tweenの時間を加工する
            tw1 = BetweenAS3.scale(tw1, 0.5); // 0.5倍
            tw2 = BetweenAS3.scale(tw2, 15); // 15倍
            tw3 = BetweenAS3.scale(tw3, 0.5); // 0.5倍
            
            // [Step.3] 切り出したTweenをがちゃんこする
            totalTween = BetweenAS3.serial(tw1, tw2, tw3);
            
            // 再生(totalTween を再生コントロールバーで制御できる)
            totalTween.stopOnComplete = false;
            totalTween.play();
            
            // レンダリング関係
            startRendering();
            
            // ついでに地面
            var earth:Plane = scene.addChild(new Plane(new WireframeMaterial(0x666666), 5000, 5000, 15, 15)) as Plane;
            earth.rotationX = 90;
        }
        
        override protected function onRenderTick(event:Event = null):void {
            // カメラの回転(BetweenAS3で制御するため)
            camera.x = 1000 * Math.cos(rot * Math.PI / 180);
            camera.z = 1000 * Math.sin(rot * Math.PI / 180);
            
            super.onRenderTick(event);
        }
    }
}