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

PV3Dベクターテキストでタイプっぽい感じに(鏡面反射あり)

/**
 * Copyright hacker_szoe51ih ( http://wonderfl.net/user/hacker_szoe51ih )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/sS6E
 */

package
{
    import flash.filters.*;
    import flash.utils.*;
    import flash.filters.BlurFilter;
    import flash.events.MouseEvent;
    import flash.events.TimerEvent;
    import flash.events.Event;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.view.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.materials.special.*;
    import org.papervision3d.typography.*;
    import org.papervision3d.typography.fonts.*;
    import org.papervision3d.view.*;
    import org.papervision3d.core.effects.view.*;
    import org.papervision3d.lights.*;

    [SWF(width=465,height=465,backgroundColor = "0xffffff", frameRate = "30")]
    
    public class Text3DSample extends ReflectionView
    {
            
      public var msg:String="NOT FLASH or HTML5 But FLASH and HTML5 !";//※英文法が正しいかどうかは知りません。いやきっと間違ってるんだろうなあ。
       public var material:Letter3DMaterial;
       public var font:HelveticaBold;
       public var word:Text3D;
       public var rot:Number=0;
       
       public var compositeMaterial:CompositeMaterial;
       public var colorMaterial:ColorMaterial;
       public var materialPlane:WireframeMaterial;
       public var plane:Plane;
       
       public var wordTimer:Timer;
       
       public var wordNum:Number=0;//表示する文字のインデックス
       public var replaceWord:String;//追加する文字を入れる
       public var newText:String="";//最終的なテキストを入れる
       
       public var randomTime:Number=0;//表示するタイミングをずらすのに使用
               
        public function Text3DSample ()
        {
            init();
        }
       
       
       public function init():void{
           
           //フィールドを作る
           compositeMaterial=new CompositeMaterial();
           materialPlane=new WireframeMaterial(0x333333,0.4);
           materialPlane.doubleSided=true;
           colorMaterial=new ColorMaterial(0xdddddd,0.4);
           compositeMaterial.addMaterial(materialPlane);
           compositeMaterial.addMaterial(colorMaterial);
           plane=new Plane(compositeMaterial,2500,2500,10,10);
           plane.pitch(90)
           scene.addChild(plane);
          
           //ベクターテキストを作る
           //マテリアルを用意 
           material=new Letter3DMaterial(0x1111ff);
           material.doubleSided=true;
           
           //フォントを用意
           font=new HelveticaBold();
           
           //Text3Dに、表示する文字列、フォント、マテリアルを指定する
          word=new Text3D("",font,material);                  
           
          //シーンに追加
          scene.addChild(word);
          word.y=150;
          
          addEventListener(Event.EXIT_FRAME,loop); 
          
          //タイマースタート
          wordTimer=new Timer(100);
          wordTimer.addEventListener(TimerEvent.TIMER,addWordTimer);
          wordTimer.start();
          
          stage.addEventListener(MouseEvent.CLICK,onClick);
           
       }
       
       //ループ処理
       public function loop(e:Event):void{
            //レンダリングスタート
          singleRender();
           rot+=2;
           camera.x=300*Math.sin(rot*Math.PI/180);
           camera.y=800*Math.cos(rot*Math.PI/180)+800;
           camera.z=1800*Math.cos(rot*Math.PI/180);         
       }
       
       //タイマー関数
       public function addWordTimer(e:TimerEvent):void{
           
           //表示するタイミングをランダムにする
           randomTime=Math.ceil(Math.random()*100);
           
           //randomTimeの値が400より大きかったら文字を追加する
           if(randomTime>20){
               
           //テキストを一旦初期化する
           scene.removeChild(word);
           word.material.destroy();
           word=null;
           
           //マテリアルをもう一回作り直す
           material=new Letter3DMaterial(0x2222ff);
           material.doubleSided=true;
           
           //文字を抜き出す
           replaceWord=msg.charAt(wordNum);
          
           //文字を連結
           newText=newText.concat(replaceWord);
           
           //Text3Dクラスをもう一回作り直す
           word=new Text3D(newText+"_",font,material);           
           scene.addChild(word);
           word.y=150;
           
           //鏡面反射を設定
             surfaceHeight=0;
             viewportReflection.filters=[new BlurFilter(2,2,2)]; 
             viewportReflection.alpha=0.5; 

           
                //文字数分タイマーを繰り返したらタイマーをストップさせる 
                //文字数未満ならカウントアップして次の文字へ進む
               if(wordNum==msg.length-1){
                   
                   wordTimer.stop();
                   
                    //テキストを一旦初期化する
                   scene.removeChild(word);
                   word.material.destroy();
                   word=null;
                   
                   //マテリアルをもう一回作り直す
                   material=new Letter3DMaterial(0x2222ff);
                   material.doubleSided=true;
                   
                   //先頭のアンダーバーを無くしたテキストを表示する
                   word=new Text3D(newText,font,material); 
                   scene.addChild(word);
                   word.y=150;
                   
                   }else{
                wordNum++
                   }
               
           }

            
           
       }
       
       //クリックしたら初期化して実行
       public function onClick(e:MouseEvent):void{
           
           wordNum=0;
           scene.removeChild(word);
           replaceWord="";
           newText="";
           wordTimer.reset();
           wordTimer.start();
           
       }

             
       
       
    }
}