[Papervision3D] How to make my MovieMaterial loads after the MovieClips ???

Ohm qkate at free.fr
Fri May 30 02:59:29 PDT 2008


Hello All,

Everything is in the title... I understand that I have to create my
MovieMaterial(s) after my mc's have been created but I can't figure out
where (or when) within this code :

Main mxml :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:comp="com.peanuts.*" layout="absolute" 
	backgroundColor="#000000"
	backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#ffffff,
#000000]" 
	applicationComplete="init()" 
	cachePolicy="on" creationPolicy="all">
	
<mx:Script>
<![CDATA[


	import mx.core.UIComponent;
	import org.papervision3d.materials.MovieMaterial;
	import mx.events.*;
	import flash.display.*;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.BitmapFileMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.view.*;
	import org.papervision3d.scenes.*;
	import org.papervision3d.events.*;
	import org.papervision3d.render.*;
	import org.papervision3d.lights.*;
	import org.papervision3d.cameras.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.materials.shadematerials.*;
	import caurina.transitions.Tweener;
	import com.peanuts.*;

	private const SPHERE_SIZE:Number = 300;
	
	private var scene		:Scene3D;
	private var camera		:Camera3D;
	private var viewPort	:Viewport3D;
	private var renderer	:BasicRenderEngine;
	private var sp          :Sphere;
    private var spPivot     :DisplayObject3D;
    private var locations   :Array = new Array();
    private var pointLight  :PointLight3D;
    
	private var mouseDownX	:Number = 0;
    private var mouseDownY	:Number = 0;
    private var xDiff		:Number = 0;
    private var yDiff		:Number = 0;
    private var mouseIsDown	:Boolean = false;
    
    private var planeWidth	:Number = 100;
	private var planeHeight	:Number = 80;
	private var sW			:int = 12;
	private var sH			:int = 12;
	
	private var maxPlanes	:Number = 90;
	private var radius		:Number = 305;
	private var pict		:Plane;
	private var pictMaterial:MovieMaterial;
				        
	private var cube		:Cube;
	private var rot			:Number = -989;
	private var rotRad		:Number;

	private var loadData:LoadData = new LoadData();

	private function init():void
	{
		init3D();
		
		stage.align = StageAlign.TOP_LEFT;
		stage.quality = StageQuality.LOW;
		stage.scaleMode = StageScaleMode.NO_SCALE;
		
        stage.addEventListener( MouseEvent.MOUSE_DOWN, mousePressed );
        stage.addEventListener( MouseEvent.MOUSE_UP, mouseReleased );
        stage.addEventListener( Event.ENTER_FRAME, onEnterFrame );
	}
	
	private function init3D():void
    {
        scene = new Scene3D();
        renderer = new BasicRenderEngine();
        viewPort = new Viewport3D( this.width, this.height, true, true );
        var uic:UIComponent = new UIComponent();
        uic.addChild( viewPort );
        this.addChild( uic );
            
        camera = new Camera3D();
        camera.zoom = 5;
        camera.z = -300;
           
        var spMaterial:WireframeMaterial = new WireframeMaterial( 0xFF00FF,
0 );
        spMaterial.smooth = false;
           
        spPivot = new DisplayObject3D();
        scene.addChild( spPivot );
           
        sp = new Sphere( spMaterial, SPHERE_SIZE, sW, sH );
        spPivot.z = 400;
        sp.x = 0;
        spPivot.addChild( sp );
        
		pointLight = new PointLight3D( true );
		pointLight.y = 0;
		pointLight.z = -290;

addPlane();
	}
    
    private function mousePressed(event:Event ):void
    {
        mouseIsDown = true;
    }
   
    private function mouseReleased(event:Event ):void
    {
        mouseIsDown = false;
    }
    
    private function onEnterFrame( evt:Event ):void
    {
		if( mouseIsDown )
        {
            var currentX:Number = mouseX;
            var currentY:Number = mouseY;
                   
            var mouseAngle:Number = BDGalaxy.rad2deg( Math.atan2( mouseDownX
- currentX, mouseDownY - currentY ) );
            if( Math.abs( mouseDownX - currentX ) > 5 )
            {
                xDiff = mouseDownX - currentX;
            }
            yDiff = mouseDownY - currentY;
        }
        xDiff *= 0.8;
        yDiff *= 0.8;
		
        sp.rotationY += xDiff;
        sp.rotationY = BDGalaxy.clamp( sp.rotationY );
        spPivot.rotationX -= yDiff;
            
        spPivot.rotationX = Math.min( 80, spPivot.rotationX);
        spPivot.rotationX = Math.max( -80, spPivot.rotationX);
        mouseDownX = mouseX;
        mouseDownY = mouseY;
           
        renderer.renderScene(scene, camera, viewPort, true);
    }
    
    private static function deg2rad( degrees:Number):Number
    {
        return degrees * ( Math.PI /180 );
    }
   
    private static function rad2deg( rad:Number):Number
    {
        return rad * ( 180/Math.PI  );
    }
   
    private static function clamp( src:Number ):Number
    {
        while ( src < 0 )
        {
            src += 360;
        }
        while ( src >= 360 )
        {
            src-= 360;
        }
        return src;
    }
    
    private function addPlane(  ):void
	{
		var planeMaterial:FlatShadeMaterial = new FlatShadeMaterial( pointLight,
0x3399CC, 0x000033 );
		planeMaterial.doubleSided = true;
		planeMaterial.smooth = true;
		
		for ( var i:int = maxPlanes; i >= 0; i-- )
		{
			var plane:Plane = new Plane( planeMaterial, planeWidth, planeHeight, 1, 1
);
			// Uniform distribution
			// phi, theta - spherical coordinates
			// i - plane index
			// max - plane amount
			var phi:Number = Math.acos( -1 +( 2 * i - 1 ) / maxPlanes );
			var theta:Number = Math.sqrt( maxPlanes * Math.PI ) * phi;
			// Coordinate conversion
			// radius - radius of the sphere
			plane.x = radius * Math.cos( theta ) * Math.sin( phi );
			plane.y = radius * Math.sin( theta ) * Math.sin( phi );
			plane.z = radius * Math.cos( phi );	
			
			// Add planes
			var plName:String = "Plane" + String(i);
			sp.addChild( plane, plName );
			plane.lookAt( sp );
			
			// Add pictures
			trace("imgURLs: "+ loadData.tabMC[i] );//-> UNDEFINED

			pictMaterial = new MovieMaterial( loadData.tabMC[i] );// -> TOO SOON !
			pictMaterial.doubleSided = false;
			pictMaterial.smooth = true;
			pictMaterial.interactive = true;
			
			pict = new Plane( pictMaterial, planeWidth, planeHeight, 1, 1 );
			
			pict.addEventListener( InteractiveScene3DEvent.OBJECT_RELEASE,
pictHandler );

			pict.x = sp.getChildByName( plName ).x + (plane.x * 1.5);
			pict.y = sp.getChildByName( plName ).y + (plane.y * 1.5);
			pict.z = sp.getChildByName( plName ).z + (plane.z * 1.5);
			sp.addChild( pict );
			pict.lookAt( plane );
			Tweener.addTween( pict, { x:sp.getChildByName( plName ).x, 
									y:sp.getChildByName( plName ).y, 
									z:sp.getChildByName( plName ).z,
									time:5, 
									transition:"easeInOutExpo",
									onComplete:function removePlanes():void {
										planeMaterial.fillAlpha = 0; //kind of remove planes...
									}
									} );
			
		}
					
	}

	private function pictHandler( evt:InteractiveScene3DEvent ):void
	{
		var clickedPlane:Plane = evt.target as Plane;
		trace( "pictHandler: " + clickedPlane );
	}

]]>
</mx:Script>

</mx:Application>

And here is the class to load my pictures in movieclips :

package com.peanuts
{

	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	
	import org.papervision3d.materials.MovieMaterial;
	
	public class LoadData
	{
		
		[Bindable]
		public var tabMC:Array = [];

		
		public function LoadData( )
		{
			loadXmlData();
		}
		
		private function loadXmlData():void
		{
			var loader:URLLoader = new URLLoader();
			loader.load( new URLRequest( "imgs/data.xml" ) );
			loader.addEventListener( Event.COMPLETE, onXmlComplete );
		}
		
		private function onXmlComplete( evt:Event ):void
		{
			var dataXml:XML =  new XML(evt.currentTarget.data);	
			var entries:XMLList = dataXml.children();
			var numberOfPhotos:int = entries.length();
					
			for ( var j:int = 0; j < numberOfPhotos; j++ )
			{
				var _entryNode:XML = entries[j];
				var _imageUrl:String = _entryNode.img;
				var loader:Loader = new Loader();
				loader.contentLoaderInfo.addEventListener( Event.COMPLETE,
loaderHandler, false, 5 );
				var req:URLRequest = new URLRequest( _imageUrl );// OK
				loader.load( req );
			}
			
		}
		
		private function loaderHandler( evt:Event ):void
		{
			var loader:Loader = Loader( evt.target.loader );
			var img:Bitmap = Bitmap( loader.content );
			var bmp:BitmapData = img.bitmapData;

			var mc:MovieClip = new MovieClip();
			mc.addChild( img );
			setMC( mc );
		}
		
		private function setMC( _mc:MovieClip ):void
		{
			this.tabMC.push( _mc );
		}
}
}

Thx for any help, I've been struggling with this without any solution :-(
-- 
View this message in context: http://www.nabble.com/How-to-make-my-MovieMaterial-loads-after-the-MovieClips-----tp17555415p17555415.html
Sent from the Papervision3D mailing list archive at Nabble.com.




More information about the Papervision3D mailing list