Flash: sobreposição de swf (evitar links)

pedroac

Membro
Um colega que é designer tem um problema com actionscript 2. Ele importou ficheiros swf noutro. O problema é que eles têm links, e quando estão sobrepostos, o cursor do apontador (rato) continua a ficar em forma de mão quando passa por cima de links que não se vêem, que estão debaixo de outro swf.

O meu colega disse hoje (pelo msn):
"o swf que esta por baixo os links devem estar desactivados"
"o menu inicial onde tem os links, quando licas num link desses abre um swf por cima do menu inicial , mas se andares com o rato por cima desse novo swf que abriu sobre o outro, os links que estao por baixo continuam activos"

Como é possível desactivar os links que estão sobrepostos por um swf?

Cumprimentos,
Pedro Amaral Couto
 
Basta colocares link_button._visible=false; nas actions onde carregas o teu swf externo.

cumps.
Obrigado. :-)
Este código funcionou:
on(release){
this.cont.load("cont.swf");
link._visible=false;
}
mas o meu colega ainda pediu-me:
podias colocar essa questao nesse forum à mesma pessoa
tipo, ao voltar como activar novamente
e diz que a fazer isso no botao ele desaparece
desactiva e desaparece o botao
Em "cont.swf" tentou-se algo como:
on(release){
link._visible=true;
{...}
}
mas diz que não dá. O link deixa de dar...
 
Encontrei a referência de Actionscript, e vi isto:
http://www.brajeshwar.com/reference/as2/Button.html
public enabled : Boolean

Player version: Flash Player 6 A Boolean value that specifies whether a button is enabled. When a button is disabled (the enabled property is set to false), the button is visible but cannot be clicked. The default value is true. This property is useful if you want to disable part of your navigation; for example, you may want to disable a button in the currently displayed page so that it can't be clicked and the page cannot be reloaded.

Example

The following example demonstrates how you can disable and enable buttons from being clicked. Two buttons, myBtn1_btn and myBtn2_btn, are on the Stage and the following ActionScript is added so that the myBtn2_btn button cannot be clicked. First, add two button instances on the Stage. Second, give them instance names of myBtn1_btn and myBtn2_btn. Lastly, place the following code on frame 1 to enable or disable buttons.
myBtn1_btn.enabled = true;
myBtn2_btn.enabled = false;

//button code
// the following function will not get called
// because myBtn2_btn.enabled was set to false
myBtn1_btn.onRelease = function() {
trace( "you clicked : " + this._name );
};
myBtn2_btn.onRelease = function() {
trace( "you clicked : " + this._name );
Se o meu colega conseguir resolver o problema dele, coloco a solução no tópico.

Cumps
};
 
Para activares o botao de novo, ou para o mostrares fazes o mesmo:

link1._visible=true;
mas aqui tens que ter atençao, nao funciona no cont.swf, porque o link1 nao esta dentro do cont.swf teras que referir o sitio onde ele esta. se estiver no stage principal, algo como _root.link1._visible=true; Se estiver no stage principal, mas dentro de um mc, de menus por exemplo. Algo como _root.mc_butoes.link1.visible=true; Nao sei se estas a perceber, o link1.visible, so funciona no proprio container onde ele esta, se o botao esta em outro container/movieclip, para desactivares algo de outro container/movieclip tens que indicar sempre qual o ome_do_container.objecto_a_modificar._propriedade, mas atençao, se o teu cont.swf for um swf externo, e nao "linkado/importado" para/da libraria, qualquer instruçao que venha desse cont.swf referente ao flash onde a carregaste, dificilmente funcionara, ja que sao 2 swf's diferentes.


p.s. o on(release) so deve ser usado em botoes, logo no cont.swf nao funcionarà, tenta colocar a instruçao para mostrares os botoes de novo na altura em que fazes o unload ao movie cont.swf. Deveras ter um botao para isso certo? ou o cont.swf esta sempre a correr?

Bem, caso faças o unload do movie, perto de alguma istruçao como minha_zona_de_carregar_movies_mc.unloadMovie();
e logo a seguir o teu *link._visiblue=true;

deve funcionar :)

* - Nota que teras que ver a localizaçao do teu link. Se usares o metodo que te dei em cima, a seguir ao unloadMovie, nao deves precisar de mais nada, so link1._visible=true;


Cumps.
 
Última edição:
Sou programador, mas nunca usei Actionscript...
o meu colega emprestou-me um Flash, e fiz umas experiências. Mas antes ele explicou-me que antes de usar o Actionscript tinha de converter as formas em botões (Modify > Convert to symbol). É tão simples... lol

No botão (link) do swf principal:
on(release)
{
loadMovieNum("cont.swf", 1);
link.enabled = false;
}

No botão de "cont.swf":
on(release)
{
_level0.link.enabled=true;
unloadMovie(_level1);

}

O _invisible faz desaparecer a imagem... o enabled desactiva o link. :-)
Não sei por que não dá para fazer:
on(release)
{
loadMovieNum("cont.swf", 1);
link.enabled = false;
_level1.onUnload = function()
{
link.enabled=true;
}

}
(será que o "release" termina antes de _level1 ficar descarregado?)
De qualquer modo está a funcionar.

Obrigado pela ajuda, e espero que isso possa ajudar outros.

Cumps,
Pedro Amaral Couto
 
Mas estas a usar esse on (release) onde??? é num botao certo? Mas ao definires a instruçao do onUnload no botao ele so vai correr isso durante o tempo que estiveres a carregar no botao. o que eu te aconselho, mesmo ja tendo tu exemplificados com carregamentos de filmes para levels, é carregares o movieclip para um outro vazio.

Algo como.

Na stage principla crias uma area para carregar o cont.swf, converte-a para movieclip e das-lhe o nome por exemplo loader_mc

no botao que chama o cont.swf so carregas o files.:
on(release)
{
loader_mc.loadMovie("cont.swf");
link.enabled = false;
}

Agora, tens duas opçoes. Crias um layer na timeline do stage e das-lhe a mesma duraçao em frames que o teus outros layers. carregas F9 em actions e escreves a instruçao que tens em cima.

loader_mc.onUnload= function() {
link.enable=true;
}

podes optar por colocar o mesmo evento, dentro do loader_mc, no layer 1, frame 1, mas ai teras que referenciar o main stage como destinatario e como estas dentro do loader_mc, seria algo como
this.onUnload=function() {
_root.link.enable=true;
}
//Nao estou certo se esta ultima hipotese funcionarà, mas esperimenta. Pelo menos a primeira deve funcionar.

cumps.
 
Mas estas a usar esse on (release) onde??? é num botao certo? Mas ao definires a instruçao do onUnload no botao ele so vai correr isso durante o tempo que estiveres a carregar no botao.

Era o que estava a pensar.
Queria colocar o onLoad fora do on(release), mas não tinha pensado no ActionScript da timeline. De qualquer modo, está resolvido.

Cumps
 
Back
Topo