Home > Flash | PaperVision3D | WEB > PaperVision3Dでタグクラウド

PaperVision3Dでタグクラウド

e38394e382afe38381e383a3-4

最近、3Dのタグクラウドよくみるので、
何となく作ってみた・・・けど、これ目立つけど見づらいような。。。


あの雲まで飛べる!

XMLでタグ情報を読み込んで、
タグの内容から、Text3Dオブジェクトを生成して、
PaperVision3Dのシーンに参加させています。

あとはTweenerでくるくると。

読み込んでいるタグクラウド用のXMLは こちら

コード

ACTIONSCRIPT:
  1. package {
  2.     import caurina.transitions.Tweener;
  3.    
  4.     import flash.display.*;
  5.     import flash.events.*;
  6.     import flash.net.URLLoader;
  7.     import flash.net.URLRequest;
  8.     import flash.text.TextField;
  9.    
  10.     import org.papervision3d.cameras.*;
  11.     import org.papervision3d.materials.*;
  12.     import org.papervision3d.materials.special.Letter3DMaterial;
  13.     import org.papervision3d.objects.*;
  14.     import org.papervision3d.render.BasicRenderEngine;
  15.     import org.papervision3d.scenes.*;
  16.     import org.papervision3d.typography.fonts.HelveticaBold;
  17.     import org.papervision3d.view.Viewport3D;
  18.     [SWF(backgroundColor=0x000000)]
  19.    
  20.     public class Pv3DCloud extends Sprite
  21.     {
  22.         private var scene     : Scene3D;
  23.         private var camera    : Camera3D;
  24.         private var rootNode  : DisplayObject3D;
  25.  
  26.        private var viewport:Viewport3D;
  27.        private var renderer:BasicRenderEngine;
  28.        
  29.         private var loader:URLLoader;
  30.         private var text:TextField;
  31.        
  32.         private var tags:Array;
  33.         private var bases:Array;
  34.        
  35.         private var cameraPosition:Number = 3300;
  36.         private var radius:Number = 1000;
  37.        
  38.         public function Pv3DCloud()
  39.         {
  40.             stage.frameRate = 60;
  41.             stage.quality   = "MEDIUM";
  42.             stage.scaleMode = "noScale";
  43.             stage.align = StageAlign.TOP_LEFT;
  44.  
  45.             var url:URLRequest = null;
  46.            
  47.             var flashvars:Object = LoaderInfo(this.root.loaderInfo).parameters;
  48.             var xmlpath:String = (flashvars["xmlpath"])String(flashvars["xmlpath"]) : "test.xml" ;
  49.             url = new URLRequest(xmlpath);
  50.            
  51.             loader = new URLLoader();
  52.             loader.addEventListener(Event.COMPLETE, onLoadHandler);
  53.             loader.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
  54.             loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorHandler);
  55.             loader.load(url);   
  56.         }
  57.        
  58.         private function onSecurityErrorHandler(event:Event):void{
  59.             trace("sec error");
  60.         }
  61.        
  62.         private function onLoadHandler(event:Event):void{
  63.             trace("onload");
  64.             try{
  65.                 var xmlData:XML = new XML(this.loader.data);
  66.                 tags = new Array;
  67.                 bases = new Array;
  68.  
  69.                 viewport = new Viewport3D(stage.stageWidth , stage.stageHeight);
  70.                 addChild(viewport);//viewportを表示ツリーに追加
  71.                 renderer = new BasicRenderEngine();
  72.        
  73.                 scene = new Scene3D();
  74.                 camera = new Camera3D();
  75.  
  76.                 //rootNode生成
  77.                 rootNode = new DisplayObject3D();
  78.                 scene.addChild( rootNode );
  79.                
  80.                 var letterMaterial:Letter3DMaterial = new Letter3DMaterial;
  81.                 letterMaterial.fillColor = 0xFFFFFF;
  82.                 letterMaterial.oneSide = false;
  83.                 letterMaterial.interactive = true;
  84.                
  85.                 var i:Number = 0;
  86.                 var tagXml:XMLList = xmlData.tags.tag;
  87.                 var oneDegree:Number = 360 / tagXml.length();
  88.                 for each(var tag in xmlData.tags.tag){
  89.                     var tag3D:Tag3D = new Tag3D(String(tag) , new HelveticaBold() , letterMaterial);
  90.                     tag3D.degree = oneDegree * i;
  91.                     //tag3D.scale = 1 + Number(tag.@level) * 3 /10;
  92.                     if(tag.@level == "1") tag3D.scale = 3;
  93.                     else if(tag.@level == "2") tag3D.scale = 1.75;
  94.                     tag3D.rotateSpeed = Math.floor(Math.random()*5)+1;
  95.                     tag3D.y = Math.floor(Math.random()*(radius*2))-radius;
  96.                     tag3D.z = radius*Math.sin(tag3D.degree * Math.PI / 180);
  97.                     tag3D.x = radius*Math.cos(tag3D.degree * Math.PI / 180);
  98.                     Tweener.addTween(tag3D, {time:tag3D.rotateSpeed, rotationX:360, onComplete:onTweenHandler, onCompleteParams:[i]});
  99.                     rootNode.addChild(tag3D);
  100.                     tags.push(tag3D);
  101.                     i++;
  102.                 }
  103.                 stage.addEventListener(Event.ENTER_FRAME, loop);
  104.                 camera.z = -this.cameraPosition;
  105.  
  106.             }catch(err:Error){
  107.                 trace("error" + err.toString());
  108.                 return;
  109.             }
  110.         }
  111.        
  112.         private function onIOErrorHandler(event:Event):void{
  113.             trace("io error");
  114.         }
  115.        
  116.         private function onTweenHandler(i):void{
  117.             var tag3D:Tag3D = tags[i];
  118.             tag3D.rotationX = 0;
  119.             tag3D.rotationY = 0;
  120.             var XorY = (Math.floor(Math.random()*2));
  121.             if(XorY) Tweener.addTween(tag3D, {time:tag3D.rotateSpeed, rotationX:360, onComplete:onTweenHandler, onCompleteParams:[i]});
  122.             else Tweener.addTween(tag3D, {time:tag3D.rotateSpeed, rotationY:360, onComplete:onTweenHandler, onCompleteParams:[i]});
  123.         }
  124.        
  125.         private function loop( event:Event ):void
  126.         {
  127.             for each(var tag3D:Tag3D in tags){
  128.                 tag3D.degree += 3;
  129.                 tag3D.z = radius*Math.sin(tag3D.degree * Math.PI / 180);
  130.                 tag3D.x = radius*Math.cos(tag3D.degree * Math.PI / 180);
  131.             }
  132.             renderer.renderScene(scene, camera, viewport);
  133.         }
  134.     }
  135. }

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://parpue.net/web/667/trackback
Listed below are links to weblogs that reference
PaperVision3Dでタグクラウド from parpue.net

Home > Flash | PaperVision3D | WEB > PaperVision3Dでタグクラウド

リンク
chocolataste-planner
millon

サーチ
Feeds
Meta
blog ranking ブログランキング・にほんブログ村へ
にほんブログ村 テクノラティのお気に入りに追加する

Return to page top