Comunidad de diseño web y desarrollo en internet online

Crear objetos por codigo

Citar            
MensajeEscrito el 01 Jun 2009 09:17 pm
Hola amigos, alguien que me explique porque cuando llamo a una función que debe crear un boton al que invoco desde el primer frame de mi archivo .fla de la siguiente manera:

Código :

creaObjetos()

me sale el siguiente error:

Código :

1180: Llamada a un método addChild posiblemente no definido.

en el archivo .as tengo esto:

Código :

package {   
   import fl.controls.Button;
   public class Objetos {
      public function creaObjetos(){
         var downButton:Button = new Button();
         downButton.label = "hola";         
         downButton.setSize(20, 20);
         downButton.move(10, 30);
         addChild(downButton)         
      }
   }
}


¿alguien podria explicarme el porque de ese error?

Por kriptonitex

17 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Jun 2009 10:12 pm
kriptonitex, se me ocurre un par de cosas:

1º la clase Button ase referencia a un "Componente", con lo que debes tener ese componente en tu libreia, es decir debes arrastrar desde el panel de componentes hasta la libreria.

2º la clase que creaste "Objetos" ase una llamada a addChild(downButton), pero no especificas el contenedor donde se va a agregar el boton, tendrias que ampliar la clase Button para que asi tengas un contenedor donde aser tu llamada addChild(); lo cual no me parece necesario, ya que Button es un componente y solo necesitas crear una funcion no una clase... con este codigo bastaria y te correria sin problemas:

Código :

import fl.controls.Button;
function creaObjetos() {
   var downButton:Button = new Button();
   downButton.label = "hola";         
   downButton.setSize(20, 20);
   downButton.move(10, 30);
   addChild(downButton);
}


luego ases una llamada a:
creaObjetos();
y ya esta te crea el boton, (al llamar addChild() en este contexto estas agregando el boton al escenario principal y no tira ningun error).
.

Por marrkitos

51 de clabLevel



 

Arequipa - Peru

chrome
Citar            
MensajeEscrito el 01 Jun 2009 11:45 pm
marrkitos, el codigo que escribiste esta bien, pero lo que yo quisiera es alguna forma en la que todo esto quede dentro de un archivo .as, ya que de la manera que me indicas tendria que estar necesariamente en algun fotograma de la pelicula, y eso es precisamente lo que no quiero. (y si agregé el botón a la biblioteca):cry:

Por kriptonitex

17 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Jun 2009 01:48 am
A bueno si lo ke kieres es una clase asi, pues te convendria extender o la clase Sprite o SimpleButton, ambas te brindan bastante flexibilidad para crear tu boton o botones. Te soy sincero yo tambien soy nuevo en ActionScript pero voy aprendiendo rapido. Justamente ase unos dias atras empese a diseñar una clase para crear un boton personalizado, ya esta casi terminada solo kedan algunos detalles. Si tienes problemas para armar tu codigo me avisas y yo te paso lo que eh avanzado. Te alcanzaria ahora el codigo pero no esta pulido, y mostrarlo asi aria que me lluevan criticas. (constructivas claro...tan buena la gente de cristalab xD).

Por marrkitos

51 de clabLevel



 

Arequipa - Peru

chrome
Citar            
MensajeEscrito el 02 Jun 2009 06:33 am
Kriptonitex, lo que Marrkitos quiere decir es que, para que puedas hacer un addChild sobre un Objeto, ese objeto ha de pertenecer a una Clase debe "Extender" de un "DisplayObjectContainer" (o de alguna clase que extienda de ella, esto es Sprite, Stage, Loader ó de alguna clase que extienda de estas últimas, como MovieClip)

Código ActionScript :

public class Objetos extends Sprite {  //<--por ejemplo lo hago que extienda de Sprite
}


Con eso, los botones se añadirían al Objeto de la Clase Objetos que a su vez la deberíamos añadir al Stage. Esot es, en la película principal

Código ActionScript :

var objetos:Objetos=new Objectos();
objetos.creaObjetos();
objetos.addChild()

O, si tenemos una "clase de documento", por ejemplo la llamamos "Main" y tenemos, un fichero llamado "main.as"

Código ActionScript :

package{
   public Class Main extends MovieClip { //<--la Clase de documento ha de extender de MovieClip
           //declaro aquí la variable "objetos", para que sea accesible desde cualquier sitio
           var objetos:Objetos
           public funcion Main(){  //<--esto es el contructor y será lo primero que haga
                                         //nuestra película
                   objetos=new Objectos();
                   objetos.creaObjetos()
                   objetos.addChild()
            }
    }
}


NOTA:Si lo que querías es que la "clase de documento" de tu película Flash fuera "Objetos", objetos.as debería ser de la forma

Código ActionScript :

package{
   public Class Objetos extends MovieClip { //<--la Clase de documento ha de extender de MovieClip
     public function Objetos(){
            creaObjetos();
     }
     private function creaObjetos() {
         var downButton:Button = new Button();
         downButton.label = "hola";         
         downButton.setSize(20, 20);
         downButton.move(10, 30);
         addChild(downButton);
     }
  }
}


Vemos que una Clase tiene
1.-Una zona de variables accesibles desde cualquier función (se suele llamar "método") de la Clase
2.-Una función "constructora" con el mismo nombre de la Clase que es lo PRIMERO que se ejecuta cuando se hace un "new"

Código ActionScript :

var variable:MiClase=new MiClase()

o, si es la clase de documento, cuando se incia la película
3.-Diversas funciones auxiliares
4.-Una Clase, si no le decimos nada es de tipo "Objeto", si queremos que tenga más propiedades o métodos que un "simple Objeto" debemos "extenderla" de alguna clase superior

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2009 03:45 pm
wow Eliseo2 ^^ ^^ , eres lo maximo, yo que pense que estaba aprendiendo rapido el ActionScript 3 y sin embargo veo que me falta mucho camino aun por recorrer, voy a seguir practicando para tratar de llegar a tener un nivel aunque sea decente :cool:

Por kriptonitex

17 de clabLevel



 

msie8

 

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