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

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

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


FORKED
  1. // forked from buccchi's オッス、おらロク!
  2. /**
  3.  * 画面クリックで輪郭線表示+ズーム+スロー再生
  4.  * 再度クリックで元に戻ります
  5.  *
  6.  * ロク(猫)の写真はこちら
  7.  * http://www.flickr.com/photos/40441900@N08/
  8.  * Blenderでモデリング
  9.  */
  10. package {
  11.     import flash.events.Event;
  12.     import org.papervision3d.view.BasicView;
  13.     import org.papervision3d.render.BasicRenderEngine;
  14.     import org.papervision3d.objects.parsers.DAE;
  15.     import org.papervision3d.core.render.filter.FogFilter;
  16.     import org.papervision3d.materials.BitmapFileMaterial;
  17.     import org.papervision3d.materials.special.FogMaterial;
  18.     import org.papervision3d.materials.special.ParticleMaterial;
  19.     import org.papervision3d.objects.special.ParticleField;
  20.     import net.hires.debug.Stats;
  21.     import flash.events.MouseEvent;
  22.     import org.libspark.betweenas3.BetweenAS3;
  23.     import org.libspark.betweenas3.tweens.ITween;
  24.     import org.libspark.betweenas3.easing.*;
  25.     import org.libspark.betweenas3.events.TweenEvent;
  26.     
  27.     public class FlashTest extends BasicView {
  28.             private var _camR:Number = 0;
  29.         private var _camY:Number = 0;
  30.         private var _camD:Number = 0;
  31.         private var _rokuLine:DAE;
  32.         private var _mountains:Array;
  33.         private var _it:ITween;
  34.         public var _speed:Number = 4;
  35.         public var _ratio:Number = 1;
  36.         public var _k:Number = 0;
  37.         private var _inks:Vector.<ParticleField>;
  38.         
  39.         public function FlashTest():void {
  40.             addChild( new Stats() );
  41.             
  42.             _inks = new Vector.<ParticleField>();
  43.             //useOwnContainerを有効にすると最前面に表示されてしまう?
  44.             
  45.             //ロク生成
  46.             var roku:DAE = new DAE();
  47.             roku.load("http://7980.oui-imja.com/wonderfl/201002/roku.dae");
  48.             scene.addChild(roku);
  49.             roku.scale = 100;
  50.             roku.y = -200;
  51.             
  52.             //輪郭線表示用オブジェクト生成
  53.             _rokuLine = new DAE();
  54.             _rokuLine.load("http://7980.oui-imja.com/wonderfl/201002/roku_line.dae");
  55.             _rokuLine.scale = 100;
  56.             _rokuLine.y = -200;
  57.             _rokuLine.name = "line";
  58.             
  59.             //山生成
  60.             _mountains = new Array();
  61.             for(var i:uint=0; i<10; i++){
  62.                 var mountain:DAE = new DAE();
  63.                 mountain.load("http://7980.oui-imja.com/wonderfl/201002/mountain.dae");
  64.                 scene.addChild(mountain);
  65.                 mountain.x = i*2300;
  66.                 mountain.y = 200;
  67.                 resetMountain(mountain);
  68.                 _mountains.push(mountain);
  69.             }
  70.             
  71.             // レンダリング
  72.             var fg:FogMaterial = new FogMaterial(0xFFFFFF);
  73.             renderer.filter = new FogFilter(fg, 50500020000);
  74.             startRendering();
  75.             stage.addEventListener(MouseEvent.CLICK, onClickHandler);
  76.         }
  77.         
  78.         private function onClickHandler(e:MouseEvent):void {
  79.             if(_it != null) _it.stop();
  80.             if(scene.getChildByName("line") == null){
  81.                 //ズームイン
  82.                 scene.addChild(_rokuLine);
  83.                 //墨エフェクト用パーティクル削除
  84.                 removeInks();
  85.                 //墨エフェクト用パーティクル生成
  86.                 var particleMat:ParticleMaterial = new ParticleMaterial(0x0, 11);
  87.                 var ink1:ParticleField = new ParticleField(particleMat, 250600600600);
  88.                 var ink2:ParticleField = new ParticleField(particleMat, 635600600600);
  89.                 var ink3:ParticleField = new ParticleField(particleMat, 2515800800800);
  90.                 _inks.push(ink1);
  91.                 _inks.push(ink2);
  92.                 _inks.push(ink3);
  93.                 //
  94.                 _it = BetweenAS3.parallel(
  95.                             BetweenAS3.tween(this, { _speed:.5, _k:0 }, { _k:18 }, .3, Sine.easeOut),
  96.                             BetweenAS3.tween(this, { _ratio:.4 }, null, .3, Cubic.easeOut));
  97.                 for(var j:uint=0; j<_inks.length; j++){
  98.                     scene.addChild(_inks[j]);
  99.                     _inks[j].rotationX = Math.random()*360;
  100.                     _inks[j].rotationY = Math.random()*360;
  101.                     _it = BetweenAS3.parallel(
  102.                             _it,
  103.                             BetweenAS3.tween(_inks[j], { scale:1 }, { scale:.5 }, .3, Cubic.easeOut));
  104.                 }
  105.                 _it.play();
  106.             }else{
  107.                 //スームアウト
  108.                 scene.removeChild(_rokuLine);
  109.                 _it = BetweenAS3.parallel(
  110.                             BetweenAS3.tween(this, { _speed:4, _k:0 }, { _k:5 }, .5, Sine.easeOut),
  111.                             BetweenAS3.tween(this, { _ratio:1 }, null, .5, Cubic.easeOut));
  112.                 for(var i:uint=0; i<_inks.length; i++){
  113.                     _it = BetweenAS3.parallel(
  114.                             _it,
  115.                             BetweenAS3.tween(_inks[i], { scale:_inks[i].scale+15, alpha:0 }, null, .5, Sine.easeOut));
  116.                 }
  117.                 _it.addEventListener(TweenEvent.COMPLETE, completeZoomOut);
  118.                 _it.play();
  119.             }
  120.         }
  121.         
  122.         private function completeZoomOut(e:TweenEvent):void {
  123.             _it.removeEventListener(TweenEvent.COMPLETE, completeZoomOut);
  124.             removeInks();
  125.         }
  126.         
  127.         private function removeInks():void {
  128.             while(_inks.length){
  129.                 scene.removeChild(_inks[0]);
  130.                 _inks.shift();
  131.             }
  132.         }
  133.         
  134.         private function resetMountain(dae:DAE):void {
  135.             dae.y = -Math.random()*400-1800;
  136.             dae.z = (Math.random()<.5)? Math.random()*5000+1000 : Math.random()*-5000-1000;
  137.             dae.scale = Math.random()*40+150;
  138.             dae.scaleY = Math.random()*120+80;
  139.             dae.rotationY = Math.random()*360;
  140.         }
  141.         
  142.         override protected function onRenderTick(event:Event = null):void {
  143.             for(var i:uint=0; i<_inks.length; i++){
  144.                 _inks[i].scale += .001;
  145.             }
  146.             
  147.             //カメラを移動
  148.             _camR -= .3 * _speed +_k;
  149.             _camY += .01 * _speed;
  150.             _camD += .007 * _speed;
  151.             var h:Number =  Math.sin(_camD)*100+2500*_ratio;
  152.             camera.x = h * Math.sin(_camR * Math.PI / 180);
  153.             camera.z = h * Math.cos(_camR * Math.PI / 180);
  154.             camera.y = Math.cos(_camY)*600*_ratio;
  155.             //山を移動
  156.             for(var j:uint=0; j<_mountains.length; j++){
  157.                 if(_mountains[j].x > 12000){
  158.                     _mountains[j].x -= 24000;
  159.                     resetMountain(_mountains[j]);
  160.                 }else{
  161.                     _mountains[j].x += 50 * _speed;
  162.                 }
  163.             }
  164.             
  165.             super.onRenderTick(event);
  166.         }
  167.     }
  168. }
noswf
Get Adobe Flash Player