Ir para conteúdo

POWERED BY:

Arquivado

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

festamix

chamar funções no AS3

Recommended Posts

Olá. Estou um pouco confuso na programação do AS3 e gostaria de uma ajuda.

tenho o seguinte:

 

meubotao.addEventListener(MouseEvent.MOUSE_OVER, minhaFuncao);

 

function minhaFuncao(e:MouseEvent):void{

 

e.target.alpha = 0.5

}

 

Como posso chamar a função "minhaFuncao" sem evento algum como clicar no mouse ou coisa assim?

 

Alguém pode me orientar do funcionamento desse negocio de MouseEvent e etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ouuuuu

Tem uma roubada... mas não sei se você vai poder usar o e do event uma vez que ele é parte da sua função... mas se não fosse daria para usar assim:

myFunction(null);

 

Ai não precisa usar o dispatchEvent

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, tenho um monte de dúvidas quanto a esse negocio de funções no AS3. Meu código original é:

mc_power.bt_power.addEventListener(MouseEvent.CLICK, fl_ClickToPlayStopSound);

var fl_SC:SoundChannel;

var fl_ToPlay:Boolean = true;

function fl_ClickToPlayStopSound(evt:MouseEvent):void{
	if(fl_ToPlay){
		var s:Sound = new Sound(new URLRequest(music));
		fl_SC = s.play();
		mc_power.txt_powersound.text = "on";
	}else{
		fl_SC.stop();
		mc_power.txt_powersound.text = "off";
	}
	fl_ToPlay = !fl_ToPlay;
}

Ele é bem simples. Tanto que é um script pronto do Flash CS5. Estou fazendo um player de mp3 no qual esse script só dá Play e Pause, e a var music é o caminho do mp3. O que pretendo é fazer mais três botões, que ao clicar neles, a var music ganha outro caminho de musica e outras atribuições que ficam fora do player. Ai vem meu problema. Queria chamar novamente a função fl_ClickToPlayStopSound, parar a musica e iniciar a nova recebida ao clicar em um dos outros botões.

 

Com AS2 eu saberia fazer... Mais esse negocio de addEventListener, MouseEvent está me atrapalhando um monte...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então como no seu exemplo

 

Você pode fazer o que eu falei... que vai facilitar muito sua vida.

Tipo:

//mc_power.bt_power.addEventListener(MouseEvent.CLICK, fl_ClickToPlayStopSound);

var fl_SC:SoundChannel;

var fl_ToPlay:Boolean = true;

function fl_ClickToPlayStopSound(evt:MouseEvent):void{
trace('fui chamado sem o click');
 if(fl_ToPlay){
 var s:Sound = new Sound(new URLRequest(music));
 fl_SC = s.play();
 mc_power.txt_powersound.text = "on";
 }else{
 fl_SC.stop();
 mc_power.txt_powersound.text = "off";
 }
 fl_ToPlay = !fl_ToPlay;
}

ClickToPlayStopSound(null);

Como você não ta passando nada relacionado ao mouse para a função nem ta usando as propriedades do evento propriamente dito... e sim ta só criando como função para fazer o que você queria...

Como no antigo AS 2

 

bt.onPress = function() { bla bla bla }

 

Ou bt.onPress = myFunction();

 

você pode fazer isso que eu expliquei na respota a cima sem o dispatchEvent usando o clickToPlayStopSound(null) com o parametro null no lugar do evento de mouse... pois como você faria para chamar uma função em AS 2, PHP ou ASP se ela tem um parametro que você não quer utilizar??? você simplesmente passa o valor NULL para esse parametro e utiliza a função do mesmo jeito.

 

;)

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, no caso de eu ter usado o dispacht, seria porque ele tinha citado o e.target dentro da função, nesse caso acho que o modo como o Berseck disse, faz todo sentido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe minha burrice, mais não entendi muito bem não, as modificações que você fez, faz com que não precise do click do mouse para ser execudo? ele vai ser executado automatimente?

Para que serve então aquele evt:MouseEvent que se manteve? E o :void, qual a função dele?

 

Se tenho mais botões tipow bt_power1, bt_power2.

 

Quero que os dois chamem a função, deverei usar o:

bt_power1.addEventListener(MouseEvent.CLICK, fl_ClickToPlayStopSound);

bt_power2.addEventListener(MouseEvent.CLICK, fl_ClickToPlayStopSound);

 

???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom

 

Sim você pode ter dois botões intanciados e chamar com o mesmo addEventListener a mesma função o que você fez ta correto.

 

Agora o evt:MouseEvent quando você pega o evt é digamos que a mesma coisa que o this... só que com um pouco mais de funcionalidades... ai tu teria que ler sobre eventos e quais as propriedades do mesmo. O void é isso mesmo que quer dizer... escapar... ele evita que a função seja chamada sem ser... e que ela espalhe... digamos assim causando problemas nas demais funções....

 

Esse tipo de coisa ai eu não sei explicar porque nunca fiz curso disso ou faculdade... eu sei o que aprendi na marra rs... provavelmente um livro ou algum help dizendo para que serve pode lhe ajudar melhor do que eu quanto a isso ;)

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não foi.

Eu tenho:

mc_power.bt_power.addEventListener(MouseEvent.CLICK, fl_ClickToPlayStopSound); - Que chama a função se clicar

this.addEventListener(Event.ENTER_FRAME, fl_ClickToPlayStopSound); - Que era para chamar a função sem precisar de interação alguma. Só q não funcionou.

 

O primeiro q você alterou não resultou em nada, só deixou o botão sem chamar nada. E criou a função.

 

No AS2 erá só colocar

 

fl_ClickToPlayStopSound();

 

e pronto, função já foi chamada. Como faço isso no AS3?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acho q já mostraram isso ai, mas seria assim:

 

 

fl_ClickToPlayStopSound(null);

 

já que você não vai usar o botão clicado dentro da função, se fosse usar, ai sim precisaria do dispatchEvent

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tinha visto que faltava o fl_ malz.

Agora só restou uma dúvida. A variavel music contem o caminho do audio. Mesmo eu mudando o valor dela quando clico nos botões, ele continua com o mesmo valor. Ou seja, tocando o mesmo mp3.

Acredito ser por causa do var s:Sound = new Sound(new URLRequest(music))

Como eu zero tudo para receber o novo valor que está na variavel music?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz uma condicao e instancia dependendo da resposta.

 

Como você tem dois botoes, você pode fazer mais ou menos assim:

 

var url:UrlRequest;

 

switch(condicao){

 

case 'bt1':

url = new URLRequest('arquivo1.jpg');

break;

 

case 'bt2':

url = new URLRequest('arquivo2.jpg');

break;

}

//loader aqui

 

 

Só uma nota aqui: O void, é um tipo, nesse caso um tipo de retorno e quer dizer que nada vai ser retornado por aquela funcao.

 

Outra coisa o que o berseck sugeriu, funciona e pode ser feito assim tb:

 

function teste (e:MouseEvent = null):void{}

 

//chamando

teste();

 

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo. Bom, mais ainda estou tendo um pouco de dificuldades quanto as funções. Não entendo para que serve o

evt:Event, MouseEvent e assim por diante dentro dos parâmetros da função.

Ex:

Estou tentando criar um função que dá efeito de fade ao mc.

Assim tenho:

<code>

mc_midia.bt_fechar.addEventListener(MouseEvent.CLICK, fc_fechar);

function fc_fechar(imc:String):void{

var imc_tw = TransitionManager.start(imc, {type:Fade, direction:Transition.OUT, duration:5, easing:Strong.easeOut});

}

</code>

Se eu colocar function fc_fechar(evt:MouseEvent, imc:String):void{

ou

function fc_fechar(evt:Event, imc:String):void{

não faz diferença alguma. Funciona de qualquer das três formas.

 

Gostaria de saber tb como passo um valor a função fc_fechar para que a variável imc receba esse valor ao clicar no botão. Tentei:

mc_midia.bt_fechar.addEventListener(MouseEvent.CLICK, fc_fechar(NomedoMC));

mas não funcionou...

Desculpe por qualquer coisa. Mais de alguma forma eu tenho que aprender.

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.