Por cierto lo he modificado la clase para que me haga lo que necesito os dejo aqui el archivo por si veis algo mal pero ami para MaterialFile me funciona por unidad. /* * PAPER ON ERVIS NPAPER ISION PE IS ON PERVI IO APER SI PA * AP VI ONPA RV IO PA SI PA ER SI NP PE ON AP VI ION AP * PERVI ON PE VISIO APER IONPA RV IO PA RVIS NP PE IS ONPAPE * ER NPAPER IS PE ON PE ISIO AP IO PA ER SI NP PER * RV PA RV SI ERVISI NP ER IO PE VISIO AP VISI PA RV3D * ______________________________________________________________________ * papervision3d.org � blog.papervision3d.org � osflash.org/papervision3d */
/* * Copyright 2006-2007 (c) Carlos Ulloa Matesanz, noventaynueve.com. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ // ______________________________________________________________________ BITMAP FILE MATERIAL package org.papervision3d.materials { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Graphics; import flash.display.Loader; import flash.events.*; import flash.net.URLRequest; import flash.utils.Dictionary; import org.papervision3d.Papervision3D; import org.papervision3d.core.geom.Face3D; import org.papervision3d.core.geom.Vertex2D; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.events.FileLoadEvent; import org.papervision3d.objects.DisplayObject3D; /** * The BitmapFileMaterial class creates a texture by loading a bitmap from an external file. * * Materials collect data about how objects appear when rendered. */ public class BitmapFileMaterial extends BitmapMaterial { // ___________________________________________________________________ PUBLIC /** * Add by Alvaro Touzon is preloader. * lo que hago es un display object que usare para que actue como preloader independiente */ public var preloader:Object = null; /** * The URL that has been requested. */ public var url :String = ""; /** * Whether or not the texture has been loaded. */ public var loaded :Boolean; /** * Function to call when the last image has loaded. */ static public var callback :Function; /** * The color to use in materials before loading has finished. */ static public var LOADING_COLOR :int = MaterialObject3D.DEFAULT_COLOR; /** * The color to use for the lines when there is an error. */ static public var ERROR_COLOR:int = MaterialObject3D.DEBUG_COLOR; /** * A texture object. */ override public function get texture():Object { return this._texture; } /** * @private */ override public function set texture( asset:Object ):void { if( asset is String == false ) { Papervision3D.log("Error: BitmapFileMaterial.texture requires a String for the texture"); return; } bitmap = createBitmapFromURL( String(asset) ); _texture = asset; } /** * Internal * * Used to define if the loading had failed. */ private var errorLoading:Boolean = false; // ___________________________________________________________________ NEW /** * The BitmapFileMaterial class creates a texture by loading a bitmap from an external file. * * @param url The URL of the requested bitmap file. * @param initObject [optional] - An object that contains additional properties with which to populate the newly created material. */ public function BitmapFileMaterial( url :String="" ) { // save URL reference this.url = url; trace(this); // set the loaded flag this.loaded = false; // Loading color this.fillAlpha = 1; this.fillColor = LOADING_COLOR; // start the loading by setting the texture if ( url.length > 0 ) texture = url; loadNextBitmap(); } // ___________________________________________________________________ CREATE BITMAP /** * [internal-use] * * @param asset * @return */ protected function createBitmapFromURL( asset:String ):BitmapData { // Empy string? if( asset == "" ) { return null; } // Already loaded? else if( _loadedBitmaps[ asset ] ) { var bmp:BitmapData = _loadedBitmaps[ asset ]; bitmap = super.createBitmap( bmp ); this.loadComplete(); return bmp; } else { queueBitmap( asset ); } return null; } // ___________________________________________________________________ QUEUE BITMAP private function queueBitmap( file:String ):void { // New filename? if( ! _subscribedMaterials[ file ] ) { // Queue file _waitingBitmaps.push( file ); // Init subscription _subscribedMaterials[ file ] = new Array(); } // Subscribe material _subscribedMaterials[ file ].push( this ); // Launch loading if needed /*if( _loadingIdle ) loadNextBitmap();*/ } // ___________________________________________________________________ LOAD NEXT BITMAP private function loadNextBitmap():void { // Retrieve next filename in queue var file:String = _waitingBitmaps[0]; var request:URLRequest = new URLRequest( file ); var bitmapLoader:Loader = new Loader(); bitmapLoader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, loadBitmapProgressHandler ); bitmapLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, loadBitmapCompleteHandler ); bitmapLoader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, loadBitmapErrorHandler ); try { // Load bitmap bitmapLoader.load( request ); // Save original url _loaderUrls[ bitmapLoader ] = file; // Busy loading _loadingIdle = false; Papervision3D.log( "BitmapFileMaterial: Loading bitmap from " + file); } catch( error:Error ) { // Remove from queue _waitingBitmaps.shift(); // Loading finished _loadingIdle = true; Papervision3D.log( "[ERROR] BitmapFileMaterial: Unable to load file " + error.message ); } } // ___________________________________________________________________ LOAD BITMAP ERROR HANDLER private function loadBitmapErrorHandler( e:IOErrorEvent ):void { var failedAsset:String = String(_waitingBitmaps.shift()); // force the IOErrorEvent to trigger on any reload. // ie: no reload on retry if we don't clear these 2 statics below. _loadedBitmaps[failedAsset] = null; _subscribedMaterials[failedAsset] = null; this.errorLoading = true; this.lineColor = ERROR_COLOR; this.lineAlpha = 1; this.lineThickness = 1; // Queue finished? if( _waitingBitmaps.length > 0 ) { // Continue loading loadNextBitmap(); } else { // Loading finished _loadingIdle = true; if( Boolean( callback ) ) callback(); } var event:FileLoadEvent = new FileLoadEvent(FileLoadEvent.LOAD_ERROR, failedAsset, -1, -1, e.text); dispatchEvent(event); } // ___________________________________________________________________ LOAD BITMAP PROGRESS HANDLER private function loadBitmapProgressHandler( e:ProgressEvent ):void { this.url = _waitingBitmaps[0]; var obj:Object = _subscribedMaterials[ url ] ; var progressEvent:FileLoadEvent = new FileLoadEvent( FileLoadEvent.LOAD_PROGRESS, this.url, e.bytesLoaded, e.bytesTotal, "cargando", this ); dispatchEvent( progressEvent ); } // ___________________________________________________________________ LOAD BITMAP COMPLETE HANDLER private function loadBitmapCompleteHandler( e:Event ):void { var loader:Loader = Loader( e.target.loader ); var loadedBitmap:Bitmap = Bitmap( loader.content ); // Retrieve original url var url:String = _loaderUrls[ loader ]; // Retrieve loaded bitmapdata var bmp:BitmapData = super.createBitmap( loadedBitmap.bitmapData ); // Update subscribed materials for each( var material:BitmapFileMaterial in _subscribedMaterials[ url ] ) { material.bitmap = bmp; material.maxU = this.maxU; material.maxV = this.maxV; material.resetMapping(); material.loadComplete(); } // Include in library _loadedBitmaps[ url ] = bmp; // Remove from queue _waitingBitmaps.shift(); // Queue finished? if( _waitingBitmaps.length > 0 ) { // Continue loading //loadNextBitmap(); } else { // Loading finished _loadingIdle = true; trace("ENTRO") if( Boolean( callback ) ) callback(); } } // ___________________________________________________________________ LOAD COMPLETE private function loadComplete():void { this.fillAlpha = 0; this.fillColor = 0; this.loaded = true; // Dispatch event var fileEvent:FileLoadEvent = new FileLoadEvent( FileLoadEvent.LOAD_COMPLETE, this.url ); this.dispatchEvent( fileEvent ); } /** * drawFace3D */ override public function drawFace3D(instance:DisplayObject3D, face3D:Face3D, graphics:Graphics, v0:Vertex2D, v1:Vertex2D, v2:Vertex2D):int { if (bitmap == null || errorLoading) { var x0:Number = v0.x; var y0:Number = v0.y; var x1:Number = v1.x; var y1:Number = v1.y; var x2:Number = v2.x; var y2:Number = v2.y; if(errorLoading){ graphics.lineStyle(lineThickness,lineColor,lineAlpha); } graphics.beginFill( fillColor, fillAlpha ); graphics.moveTo( x0, y0 ); graphics.lineTo( x1, y1 ); graphics.lineTo( x2, y2 ); graphics.lineTo( x0, y0 ); graphics.endFill(); if(errorLoading){ graphics.lineStyle(); } return 1; } var i:int = super.drawFace3D(instance, face3D, graphics, v0, v1, v2); return i; } // ___________________________________________________________________ PRIVATE // Filenames in the queue private var _waitingBitmaps :Array = new Array(); // URLs per loader static private var _loaderUrls :Dictionary = new Dictionary(); // Loaded bitmap library static private var _loadedBitmaps :Object = new Object(); // Materials subscribed to the loading queue static private var _subscribedMaterials :Object = new Object(); // Loading status static private var _loadingIdle :Boolean = true; } } El día 7 de mayo de 2008 22:53, Alvaro Touzon <[EMAIL PROTECTED]> escribió: > si lo veo pero para que usazs DisplayObject3D? > Lo que no veo es que traces e,target.name, lo voy a probar. > Si es conjuno el XML en as3 > > El día 7 de mayo de 2008 11:48, drusunlimited listas < > [EMAIL PROTECTED]> escribió: > > Hola Alvaro, he probado a ponerle name al material para poder > > recuperarlo desde el evento y me funciona perfectamente. > > > > Perdona la perogrullada pero es por centranos, y es que no se me > > ocurre otra cosa: el FileLoadEvent que recibe la funcion onLoading > > hace referencia al material, no al displayObject3D sobre el que se > > aplica el material, entonces... > > > > ¿estás creando un material diferente (y dandole un nombre diferente) > > para cada displayObject donde aplicas el material en ese for? > > > > A mi algo así me funciona: > > [code] > > for(var i:Number=0;i<l;i++){ > > var holder_item:DisplayObject3D=new DisplayObject3D(); > > stage.addChild(holder_item); > > var img:String=_xml.item.attribute("img")[i]; //esto es > > maravilloso > > por cierto :) > > var materialFront:BitmapFileMaterial=new > > BitmapFileMaterial(img); > > materialFront.name="minombre"+i; > > > > materialFront.addEventListener(FileLoadEvent.LOAD_COMPLETE,onLoaded); > > > > materialFront.addEventListener(FileLoadEvent.LOAD_PROGRESS,onLoading); > > } > > > > private function onLoaded(e:FileLoadEvent):void{ > > trace(e.bytesLoaded+" >> target << "+e.target.name); > > } > > > > private function onLoading(e:FileLoadEvent):void{ > > trace(e.bytesLoaded); > > } > > > > [/code] > > > > Un saludo > > > > 2008/5/7 Alvaro Touzon <[EMAIL PROTECTED]>: > > > Hola Javier, si el problema esta aqui al menos sobre flash, yo uso la > > > principal de as3. > > > Mira > > > si cambias esto > > > > > > private function onLoading(e:FileLoadEvent):void{ > > > trace(e.bytesLoaded); > > > } > > > por esto > > > > > > private function onLoading(e:FileLoadEvent):void{ > > > trace(e.bytesLoaded+" target"+e.target.name); > > > > > > } > > > a mi solo me sale el nombre del primer item de la secuencia. Con lo > > cual no > > > puedo hacer un preloader por secuancia. > > > Espero que me entiendas, muchas gracias > > > > > > > > > > > > El día 6 de mayo de 2008 22:44, Javier Fernández Montes < > > > [EMAIL PROTECTED]> escribió: > > > > > > > > > > > > > Hola Alvaro, desde mi desconocimiento, puesto que estoy empezando > > con > > > > papervision, te puedo decir que a mi me funcionan los eventos sin > > > > problemas. > > > > > > > > ¿qué rama de papervision utilizas? > > > > Yo uso la greatwhite desde flex y va como la seda, salvo unos > > cuanto > > > > warnings por omisión de tipos/retornos que he tenido que corregir a > > > > mano, pero que no impedían compilar. > > > > > > > > Ahora mismo estoy haciendo una frikada tipo: > > > > [code] > > > > ... > > > > public function fInitArchive():void{ > > > > var l:Number=_xml.children().length(); > > > > holder_archivo=new DisplayObject3D(); > > > > basicview.scene.addChild(holder_archivo); > > > > rueda_archivo=new DisplayObject3D(); > > > > holder_archivo.addChild(rueda_archivo); > > > > holder_archivo.z=500; > > > > for(var i:Number=0;i<l;i++){ > > > > var holder_item:DisplayObject3D=new > > > > DisplayObject3D(); > > > > rueda_archivo.addChild(holder_item); > > > > var > > img:String=_xml.item.attribute("img"); > > > > var > > materialFront:BitmapFileMaterial=new > > > > BitmapFileMaterial(img); > > > > var > > materialBack:BitmapFileMaterial=new > > > > BitmapFileMaterial(img); > > > > materialFront.smooth=true; > > > > > > > > > > materialFront.addEventListener(FileLoadEvent.LOAD_COMPLETE,onLoaded); > > > > > > > > > > materialFront.addEventListener(FileLoadEvent.LOAD_PROGRESS,onLoading); > > > > var itemFront:Plane=new > > > > Plane(materialFront,290,56,14,4); > > > > var itemBack:Plane=new > > > > Plane(materialBack,290,56,1,1); > > > > holder_item.addChild(itemFront); > > > > holder_item.addChild(itemBack); > > > > itemFront.x=itemBack.x=750; > > > > itemBack.rotationY=180; > > > > holder_item.rotationZ=i*(180/l); > > > > } > > > > > > > > stage.addEventListener(Event.ENTER_FRAME,renderLoop); > > > > } > > > > private function onLoaded(e:FileLoadEvent):void{ > > > > trace(e.bytesTotal); > > > > } > > > > private function onLoading(e:FileLoadEvent):void{ > > > > trace(e.bytesLoaded); > > > > } > > > > ... > > > > [/code] > > > > > > > > Y ya te digo que ningún problema. > > > > > > > > > > > > Javier Fernández :: Drus Unlimited™ > > > > listas[at]drusunlimited[dot]com > > > > http://drusunlimited.com > > > > > > > > El 05/05/2008, a las 12:39, Alvaro Touzon escribió: > > > > > > > > > Hola estoy empezando con papervision y cuando creo una galeria de > > x > > > > > img , > > > > > con "BitmapFileMaterial", y realizo un preloader LOAD_PROGRESS, > > no me > > > > > actualiza los datos del target, me mantiene el del primer > > material > > > > > que > > > > > llamo. > > > > > > > > > > var material:BitmapFileMaterial = new BitmapFileMaterial(img); > > > > > > > > > > > > > > > material.addEventListener(FileLoadEvent.LOAD_COMPLETE, > > > > > onLoaded); > > > > > material.addEventListener(FileLoadEvent.LOAD_PROGRESS, > > > > > onLoading); > > > > > > > > > > Algu no ha tenido ya este problema he visto por google peo no le > > veo > > > > > la > > > > > solucion, intentare darsela pero lo veo lejos, pues no conocco > > bien > > > > > el > > > > > framework. > > > > > Gracias. > > > > > ----------------------------------------------------- > > > > > ASNativos > > > > > www.5dms.com > > > > > subscripciones/desubscripciones > > > > > http://asnativos.5dms.com > > > > > ----------------------------------------------------- > > > > > > > > > > > > ----------------------------------------------------- > > > > ASNativos > > > > www.5dms.com > > > > subscripciones/desubscripciones > > > > http://asnativos.5dms.com > > > > ----------------------------------------------------- > > > > > > > ----------------------------------------------------- > > > ASNativos > > > www.5dms.com > > > subscripciones/desubscripciones > > > http://asnativos.5dms.com > > > ----------------------------------------------------- > > > > > > > > > > > -- > > Javier Fernández :: Drus Unlimited™ > > http://drusunlimited.com > > > > ----------------------------------------------------- > > ASNativos > > www.5dms.com > > subscripciones/desubscripciones > > http://asnativos.5dms.com > > ----------------------------------------------------- > > > > ----------------------------------------------------- ASNativos www.5dms.com subscripciones/desubscripciones http://asnativos.5dms.com -----------------------------------------------------