Comunidad de diseño web y desarrollo en internet online

problema con addChild de una imagen.

Citar            
MensajeEscrito el 03 Mar 2010 03:17 pm
Buenas.. lo que quiero hacer es un addChild de una imagen que esta guardada en una clase, el tema que cuando hago el addChild este no me hace nada no me levanta la foto.. y no tengo idea de porque sera.. les paso el codigo solo con el tema de la imagen asi no los hago perder tiempo para entender mi codigo jajaja..
Espero que haya una alternativa para agregar las fotos porque no la se :S

La clase que tiene la imagen como atributo.

Código :

package
{
   import mx.controls.Image;
   
   public class DatosAvion
   {
      private var tipo:int;
      private var img:Image;
         
      
      public function DatosAvion(t:int)
      {
         img.width = 60;
         img.height = 50;
         img.x = x*60;
         img.y = y*50;
         switch(tipo){
            case 1:
               img.source = "../av1.gif";
            break;
            case 2:
               img.source = "../av2.gif";
            break;
         }
      }
            
      public function getImagen():Image{
         return img;
      }
   }
}


y aqui es donde intento hacer el addChild

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">
   <mx:Script>
      <![CDATA[
         import mx.controls.Image;
         private var a:DatosAvion = new DatosAvion(1);
         public function init():void{
            addChild(a.getImagen());
         }
      ]]>
   </mx:Script>
</mx:Application>



Espero alguna respuesta :)
Desde ya muchas gracias.

Por bascansado

18 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2010 02:59 pm
Así de primeras se me ocurre que no declaras el objeto Image, es decir tu pones

private var img:Image;

y luego accedes a las propiedades de img pero tú solo declaras que img es Image pero no creas el objeto, es decir, creo que deberías poner

private var img:Image = new Image();

Saludos

Por negro81

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2010 09:51 pm
El problema es que en ningun momento estas cargando la imagen. Si la imagen es estatica y nunca va a cambiar puedes importarla (Embed) en tu pelicula, sin embargo ten en cuenta que el tiempo de carga de esta misma va a ser más largo porque ahora tiene que cargar tu imagen tambien

Código Flex :


<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    viewSourceURL="src/EmbeddingImages/index.html"
    layout="horizontal" width="350" height="250"
>    
    <mx:Script>
        <![CDATA[
            [Embed(source="assets/logo.png")]
            [Bindable]
            public var Logo:Class;            
        ]]>
    </mx:Script>
    <mx:Image id="myLogo" source="{Logo}"/>
    <mx:Image id="myLogo2" source="{Logo}"/>
</mx:Application>

codigo extraido de http://www.adobe.com/devnet/flex/quickstart/embedding_assets/

Si quieres que tu usuario vea algo de la interface de tu programa antes de cargar la imagen, osea, no quieres que la imagen haga parte de tu swf tienes que cargar la imagen de esta manera

Código ActionScript :

import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.URLRequest;

    public class LoaderExample extends Sprite {
        private var url:String = "Image.gif";

        public function LoaderExample() {
            var loader:Loader = new Loader();
            configureListeners(loader.contentLoaderInfo);
            loader.addEventListener(MouseEvent.CLICK, clickHandler);

            var request:URLRequest = new URLRequest(url);
            loader.load(request);

            addChild(loader);
        }

        private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(Event.COMPLETE, completeHandler);
            dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            dispatcher.addEventListener(Event.INIT, initHandler);
            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            dispatcher.addEventListener(Event.OPEN, openHandler);
            dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);
        }

        private function completeHandler(event:Event):void {
            trace("completeHandler: " + event);
        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {
            trace("httpStatusHandler: " + event);
        }

        private function initHandler(event:Event):void {
            trace("initHandler: " + event);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioErrorHandler: " + event);
        }

        private function openHandler(event:Event):void {
            trace("openHandler: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
        }

        private function unLoadHandler(event:Event):void {
            trace("unLoadHandler: " + event);
        }

        private function clickHandler(event:MouseEvent):void {
            trace("clickHandler: " + event);
            var loader:Loader = Loader(event.target);
            loader.unload();
        }
    }

codigo tomado de: http://livedocs.adobe.com/flex/3/langref/flash/display/Loader.html

tu obviamente no necesitas tantos listener pero pues esa es la idea.

Cualquier cosa nos avisas

Por rubencho176

Claber

301 de clabLevel

3 tutoriales

 

Colombia

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.