Ir para conteúdo

Arquivado

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

Leon Santiago

addChild (AS3)

Recommended Posts

Olá, pessoal!

Estou tentando migrar para AS3 e tive uns problemas com o novo addChild (no lugar do antigo attachMovie).

 

Tenho um MC na biblioteca, "classeado" de meuMovie. Eu gostaria de chamar 5 deles para o palco e criar uma espécie de menu, em que cada um servisse de link para uma página diferente.

 

Então eu fiz isso:

 

var n:Number = 5;
var pos:Number = 0;
for (var i:Number=0; i<n; i++) {
var item:meuMovie = new meuMovie();
this.addChild(item);
item.y = pos;
pos += 20;
}

Mas eu travei. Como eu posso instanciar cada um e começar a atribuir os listeners para CLICK, MOUSE_OVER, MOUSE_UP e tal?

 

Abraços!

Leon

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria assim

 

 

var n:Number = 5;
var pos:Number = 0;
for (var i:Number=0; i<n; i++) {
  var item:meuMovie = new meuMovie(); 
  item["indice"] = i
  item.addEventListener(MouseEvent.CLICK, onClick);
  this.addChild(item);
  item.y = pos;
  pos += 20;

}

function onClick(event:MouseEvent):void {

	trace(event.currentTarget["indice"] );

}

 

 

 

 

ps: Não testei, talvez tenha que arrumar algo

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eder, funcionou certinho! ;D

Era bem isso que eu queria, obrigado.

 

Agora, se não for abusar muito, o que aconteceu aqui?

Não peguei direito como funcionou esse "índice" e nem porque ele não foi sobrescrito cada vez que passou pelo for.

É difícil de explicar?

 

Obrigado de novo! ;D

Compartilhar este post


Link para o post
Compartilhar em outros sites

o caso é que apesar de todos terem o mesmo nome, ele são instâncias diferentes,

 

a cada var item:meuMovie = new meuMovie(); , um novo objeto é criado,

 

e é para isso que serve o "indice" para diferencia-los

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria assim

 

 

var n:Number = 5;
var pos:Number = 0;
for (var i:Number=0; i<n; i++) {
  var item:meuMovie = new meuMovie(); 
  item["indice"] = i
  item.addEventListener(MouseEvent.CLICK, onClick);
  this.addChild(item);
  item.y = pos;
  pos += 20;

}

function onClick(event:MouseEvent):void {

	trace(event.currentTarget["indice"] );

}

 

 

 

 

ps: Não testei, talvez tenha que arrumar algo

 

[]´s

Bom dia! Estou com um problema parecido, porém estou criando os MC's totalmente via código, o evento MOUSE_OVER dispara o ENTER_FRAME, estou aplicando um efeito de transparência quando o mouse não está sobre o MC e vice e versa, o problema é que o efeito está sendo aplicado sobre todos os MC ao mesmo tempo.

Tentei usar mcBar["indice"] = i, porém gera o erro: "ReferenceError: Error #1069: Propriedade indice não encontrada em builtin.as$0.MethodClosure e não há valor padrão. Untitled_fla::MainTimeline/fOnMouseOver"

Onde e como tenho que declarar o indice?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de postar olhe a data do topico, e tb poderia ter criado um topico seu pra isso, seria bem melhor.

 

Abs

 

Movido

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa esse código que postei é de um ano atras, é esta bem gambiara http://forum.imasters.com.br/public/style_emoticons/default/blush.gif , coisa de iniciante mesmo :lol:

 

o modo "correto", seria usar a classe Dictionary,

 

ela cria um tipo de Array, mas o index é um objeto ao invés de um numero,

assim você pode guardar um valor e a referencia dele é feita por um movieCLip ou caixa de texto

 

vai muda pouca coisa:

 

var conjBts:Dictionary = new Dictionary();

var n:Number = 5;
var pos:Number = 0;
for (var i:Number=0; i<n; i++)
{
	var item:meuMovie = new meuMovie();
	conjBts[item] = i;
	item.addEventListener (MouseEvent.CLICK, onClick);
	this.addChild (item);
	item.y = pos;
	pos += 20;

}

function onClick (event:MouseEvent):void
{

	trace (conjBts[event.currentTarget] );

}

 

testa agora que deve funcionar

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Éder, eu entendi o funcionamento da classe Dictionary, mas não entendi o objetivo dela.

Seria para guardar algum valor dentro daquele objeto e acessá-lo pelo próprio objeto?

 

Poderia explicar?

 

Abrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, quase isso, só para compara-la com um array pra ficar mais facil

 

você consegue guardar vários valores num único array, basta fazer referencia usando um número

 

myArr = new Array()
myArr[1] = "valor1"
myArr[2] = "valor2"

trace(myArr[1])

com a Dictionary, a referencia passa a ser qualquer instancia de um objeto, pode ser um movieClip, sprite etc:

 

myDic = new Dictionary()

mc =  new MovieCLip()
txt =  new TextField()

myDic [mc] = "valor1"
myDic [txx] = "valor2"

trace(myDic [mc])

 

usa utilidade é acabar com aquela "gambi" que fiz lá em cima, você não ter que guardar o valor no próprio mc ( mc["indice"] = 1 )

 

agora você pode usa-la para guardar esses valores, e para recuperar é só passar o objeto que você vez referencia na hora de inserir o valor,

fazendo isso você deixa centralizado esses valores num só lugar(no objeto Dictionary), ao invés de colocar cada um num mc

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

começo pedindo desculpas por saber que o thread é velho, e carne requentada faz mal :D

maaasss... tenho uma duvida que talvez seja pertinente a esse assunto

supondo que eu tenha Child adicionados em camadas dentro de Sprites e outros MCs:

 

var container:Sprite = new Sprite();
var site1:wholeSite = new wholeSite;
var uberMenu:mainMenu = new mainMenu;
var menuBase:menu = new menu;
container.addChild(site1);
site1.addChild(uberMenu, 1);
site1.addChild(menuBase, 2);

como eu faço pra "targetear" esses Childs nao pela instancia de cada um, mas sim pela "categoria"?

algo tipo:

site1.Child(1).gotoAndPlay(5);
site1.Child(2).gotoAndPlay(10);

onde (1) e (2) seriam os "niveis" onde serao carregados..

 

muito obrigado http://forum.imasters.com.br/public/style_emoticons/default/closedeyes.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá João Paulo M.M,

 

Seja bem-vindo ao Fórum. Aproveite e leia as Regras.

 

Como você mesmo disse, o tópico é antigo. Crie um novo tópico para discutir sua dúvida, pois é proibido postar dúvidas em tópico de outro autor.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites


Aproveitando o tópico pessoal, eu estou com um código addChild simples. É tipo de bomberMan, mas o que acontece é que eu não consigo adicionar mais de uma bomba. Tipo, eu adiciono uma, ai quando clico em outro ponto para adicionar outra, a primeira desaparece...

 

stage.addEventListener(MouseEvent.CLICK, acao);

function acao(event:MouseEvent):void
{	
	addChild(novaBomba1);
	novaBomba1.x = personagem1.x;
	novaBomba1.y = personagem1.y;
	
}

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.