- 2009-05-01 (金) 4:12
- Flash | PaperVision3D | WEB

最近、3Dのタグクラウドよくみるので、
何となく作ってみた・・・けど、これ目立つけど見づらいような。。。
↓
あの雲まで飛べる!
XMLでタグ情報を読み込んで、
タグの内容から、Text3Dオブジェクトを生成して、
PaperVision3Dのシーンに参加させています。
あとはTweenerでくるくると。
読み込んでいるタグクラウド用のXMLは こちら
コード
ACTIONSCRIPT:
- package {
- import caurina.transitions.Tweener;
- import flash.display.*;
- import flash.events.*;
- import flash.net.URLLoader;
- import flash.net.URLRequest;
- import flash.text.TextField;
- import org.papervision3d.cameras.*;
- import org.papervision3d.materials.*;
- import org.papervision3d.materials.special.Letter3DMaterial;
- import org.papervision3d.objects.*;
- import org.papervision3d.render.BasicRenderEngine;
- import org.papervision3d.scenes.*;
- import org.papervision3d.typography.fonts.HelveticaBold;
- import org.papervision3d.view.Viewport3D;
- [SWF(backgroundColor=0x000000)]
- public class Pv3DCloud extends Sprite
- {
- private var scene : Scene3D;
- private var camera : Camera3D;
- private var rootNode : DisplayObject3D;
- private var viewport:Viewport3D;
- private var renderer:BasicRenderEngine;
- private var loader:URLLoader;
- private var text:TextField;
- private var tags:Array;
- private var bases:Array;
- private var cameraPosition:Number = 3300;
- private var radius:Number = 1000;
- public function Pv3DCloud()
- {
- stage.frameRate = 60;
- stage.quality = "MEDIUM";
- stage.scaleMode = "noScale";
- stage.align = StageAlign.TOP_LEFT;
- var url:URLRequest = null;
- var flashvars:Object = LoaderInfo(this.root.loaderInfo).parameters;
- var xmlpath:String = (flashvars["xmlpath"]) ? String(flashvars["xmlpath"]) : "test.xml" ;
- url = new URLRequest(xmlpath);
- loader = new URLLoader();
- loader.addEventListener(Event.COMPLETE, onLoadHandler);
- loader.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
- loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityErrorHandler);
- loader.load(url);
- }
- private function onSecurityErrorHandler(event:Event):void{
- trace("sec error");
- }
- private function onLoadHandler(event:Event):void{
- trace("onload");
- try{
- var xmlData:XML = new XML(this.loader.data);
- tags = new Array;
- bases = new Array;
- viewport = new Viewport3D(stage.stageWidth , stage.stageHeight);
- addChild(viewport);//viewportを表示ツリーに追加
- renderer = new BasicRenderEngine();
- scene = new Scene3D();
- camera = new Camera3D();
- //rootNode生成
- rootNode = new DisplayObject3D();
- scene.addChild( rootNode );
- var letterMaterial:Letter3DMaterial = new Letter3DMaterial;
- letterMaterial.fillColor = 0xFFFFFF;
- letterMaterial.oneSide = false;
- letterMaterial.interactive = true;
- var i:Number = 0;
- var tagXml:XMLList = xmlData.tags.tag;
- var oneDegree:Number = 360 / tagXml.length();
- for each(var tag in xmlData.tags.tag){
- var tag3D:Tag3D = new Tag3D(String(tag) , new HelveticaBold() , letterMaterial);
- tag3D.degree = oneDegree * i;
- //tag3D.scale = 1 + Number(tag.@level) * 3 /10;
- if(tag.@level == "1") tag3D.scale = 3;
- else if(tag.@level == "2") tag3D.scale = 1.75;
- tag3D.rotateSpeed = Math.floor(Math.random()*5)+1;
- tag3D.y = Math.floor(Math.random()*(radius*2))-radius;
- tag3D.z = radius*Math.sin(tag3D.degree * Math.PI / 180);
- tag3D.x = radius*Math.cos(tag3D.degree * Math.PI / 180);
- Tweener.addTween(tag3D, {time:tag3D.rotateSpeed, rotationX:360, onComplete:onTweenHandler, onCompleteParams:[i]});
- rootNode.addChild(tag3D);
- tags.push(tag3D);
- i++;
- }
- stage.addEventListener(Event.ENTER_FRAME, loop);
- camera.z = -this.cameraPosition;
- }catch(err:Error){
- trace("error" + err.toString());
- return;
- }
- }
- private function onIOErrorHandler(event:Event):void{
- trace("io error");
- }
- private function onTweenHandler(i):void{
- var tag3D:Tag3D = tags[i];
- tag3D.rotationX = 0;
- tag3D.rotationY = 0;
- var XorY = (Math.floor(Math.random()*2));
- if(XorY) Tweener.addTween(tag3D, {time:tag3D.rotateSpeed, rotationX:360, onComplete:onTweenHandler, onCompleteParams:[i]});
- else Tweener.addTween(tag3D, {time:tag3D.rotateSpeed, rotationY:360, onComplete:onTweenHandler, onCompleteParams:[i]});
- }
- private function loop( event:Event ):void
- {
- for each(var tag3D:Tag3D in tags){
- tag3D.degree += 3;
- tag3D.z = radius*Math.sin(tag3D.degree * Math.PI / 180);
- tag3D.x = radius*Math.cos(tag3D.degree * Math.PI / 180);
- }
- renderer.renderScene(scene, camera, viewport);
- }
- }
- }
- Newer: 友人をニコ動で歌わせてみた
- Older: ボイスレコーダー買ってみた。
Comments:0
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


