Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ohrlando

Como criar uma função pública mas definí-la só dnetro do construtor?

Recommended Posts

Olá tudo bem??

 

seguinte, eu criei um pacote gallery e dentro tem a classe ThumbnailMenu extendida de um Sprite. dentro dela tem uma função chamada init.

essa função só pode ser executada quando no 'swf' for chamada, não pode ser na hora que criar a instância.

então pensei em deixar ela como um método público do objeto.

está assim:

package gallery{
	...	
	public class ThumbnailMenu extends Sprite{
		...
		public var init:Function; //aqui está ela!
		public function ThumbnailMenu (largura:int, altura:int, thickness:int = 1, showBorder:Boolean = true, borderColor:int = 0x000000, bgColor:int = 0x000000) {
			...			
			function init():void{	//aqui dentro que quero definir o conteúdo dela			
				container.graphics.lineStyle(thickness, bgColor, 1);
				container.graphics.beginFill(borderColor);
				container.graphics.lineTo(0, 0);
				...
				container.graphics.endFill();
				...
			}//function
			
			function drawMenu():void{
				trace("Drawning menu")//não montei o sprite ainda
				container.mask = maskContainer;
			}
			
			function setMenuMask():void{
				//setting mask of the menu
				function setMenuMask():void{
				//setting mask of the menu
				maskContainer.graphics.lineStyle(thickness, bgColor, 1);
				...
				maskContainer.graphics.endFill();
				//container.mask = maskContainer;
			}
			
			...
		}//function Thumbnail
		
	}//class
} //package

só quero definir o conteúdo no construtor. Mas tenho que colocar fora porque quero que ela possa ser chamada lá no swf

 

eu tentei dessa maneira parece certa mas não foi dá os seguintes erros

TypeError: Error #1006: value is not a function.

at myGallery_fla::MainTimeline/drawMenu()

at myGallery_fla::MainTimeline/frame1()

 

o que será que tem errado?

 

ps: todos os sprites estão declarados como públicos

 

abrss

Compartilhar este post


Link para o post
Compartilhar em outros sites

package gallery{

public class ThumbnailMenu extends Sprite{

private var _init:Function;

 

public function ThumbnailMenu () {

_init = function:void {

//seu código

}

}

 

public function init() :Function {

if ( _init == undefined ){

throw new Error( 'A função não está definida' );

} else {

return _init();

}

}

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa e aí? beleza?

digitei o que você falou mano, mas deu erro no compilador =/

description copy

1084: Syntax error: expecting leftparen before colon.

source copy

init = function:void{

ficou assim:

package gallery{
	...
	
	public class ThumbnailMenu extends Sprite{
		public var id:int = 4;
		
		public var init:Function;
		
		public var container:Sprite = new Sprite();
		public var menu:Sprite = new Sprite();
		
		...
		public function ThumbnailMenu (largura:int, altura:int, thickness:int = 1, showBorder:Boolean = true, borderColor:int = 0x000000, bgColor:int = 0x000000) {
			...
			
			var maskContainer:Sprite = new Sprite();
			init = function:void {	//erro aqui!			
				container.graphics.lineStyle(thickness, bgColor, 1);
				container.graphics.beginFill(borderColor);
				container.graphics.lineTo(0, 0);
				...
				container.graphics.endFill();
				
				...
				
				drawMenu();
			}//function
			
			function drawMenu():void{
				//drawing sprite of Menu
				container.addChild(menu);
				trace ("drawining menu");
				setMenuMask();
			}
			
			function setMenuMask():void{
				//setting mask of the menu
				maskContainer.graphics.lineStyle(thickness, bgColor, 1);
				...
				maskContainer.graphics.endFill();
				container.addChild(maskContainer);
				container.mask = maskContainer;
				trace ("setou mask");
			}
			
			...
			
		}//function
		
		public function _init() :Function {
			if (init == undefined ){
				throw new Error( 'A função não está definida' );
			} else {
				return _init();
			}
		}
		
	}//construtor
} 

:'(

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa e aí? beleza?

digitei o que você falou mano, mas deu erro no compilador =/

 

Sim, esqueci dos parênteses.

 

init = function() :void{}

Compartilhar este post


Link para o post
Compartilhar em outros sites

perfeitO!

 

nossa mano! valeu mesmo =D

 

abraçO!

 

só uma coisa....

lá na public function

public function _init() :Function {
                        if (init == undefined ){
                                throw new Error( 'A função não está definida' );
                        } else {
                                return _init();
                        }
                }

deu erro na linha do if, quer dizer, não erro, um aviso

Warning: 1012: Variables of type Function cannot be undefined. The value undefined will be type coerced to Function before comparison.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.