..:: MX Studio Fóruns ::..: Layout Liquido e Swf Externo [RESOLVIDO] - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




ATENÇÃO

Para evitar posts desnecessários e que não influam para o andamento e desenvolvimento do fórum, clique aqui e leia todas as regras.
Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Layout Liquido e Swf Externo [RESOLVIDO] Meu swf externo não centraliza no stage quando é carregado

#1 User is offline   Darkwader 

  • Group: Membros
  • Posts: 11
  • Joined: 07-April 09

Posted 07 April 2009 - 02:24 PM

E ai Galera

estou fazendo um site em flash com layout liquido ele esta funcionando legal porem estou tendo alguns problemas

Estou ultilizando SWF Externos e preciso deixar esses SWF sempre centralizados não importando a resolução

O que fiz:


Eu centralizei meu conteiner_mc no stage assim:

no primeiro frame do filme

container_mc._x = Stage.width/2 - container_mc._width/2;
container_mc._y = Stage.height/2 - container_mc._height/2;

certo? até coloquei uma figura dentro do meu container_mc para ver se ele ficava bem centralizado e fica certinho

ai no ultimo frame do meu filme eu chamo o SWF externo com o seguinte Script:

stop();
_root.currMovie = "entrada";
container_mc.loadMovie(_root.currMovie+".swf");


Ai eu miniminizo o filme e abro novamente e ele fica centralizado certinho

Alguem sabe o porque?


Att



0

#2 User is offline   Rodrigo Pixel 

  • Group: Moderadores
  • Posts: 1279
  • Joined: 07-May 07

Posted 07 April 2009 - 02:42 PM

Ao invés de utilizar a função loadMovie, utilize a classe MovieClipLoader, com ela você tem maior controle sobre quando o filme estiver carregado você fazer algo com ele, que no seu caso é posicionar ou reposicionar objetos na tela. com MovieClipLoader possui eventos de manipulação do arquivo e função loadMovie é apenas uma função e não uma classe.
Resumindo, com loadMovie você sempre você terá problemas de manipulação referente a esse casos.

Ex. como usar a classe MovieClipLoader:
<a href="http://www.alvoweb.com/carregar-imagem-externa-com-moviecliploader/" target="_blank">http://www.alvoweb.com/carregar-imagem-ext...oviecliploader/</a>
<a href="http://imasters.uol.com.br/artigo/3593/moviecliploader_e_loadmovie" target="_blank">http://imasters.uol.com.br/artigo/3593/mov...der_e_loadmovie</a>


E pra atualizar o posicionamento use o evento <b>onResize</b> da classe Stage.
Quando ocorrer esse evento de redimensionar seu swf, dispara uma função que você cria, e nessa função você reposiciona os objetos na tela ou faz qualquer outra coisa que precisar.


Procure por <b>onResize</b> aqui no busca do forum que existe muitas duvidas sobre isso com as soluções e com exemplos de código de como usa-lo.

Procure usar o help do flash pra maiores informações. E também o busca do forum. <img src="http://www.mxstudio.com.br/forum/public/style_emoticons/<#EMO_DIR#>/thumbsup.gif" style="vertical-align:middle" emoid="(:]|)" border="0" alt="thumbsup.gif" />

onResize
<a href="http://help.adobe.com/en_US/AS2LCR/Flash_10.0/00001541.html" target="_blank">http://help.adobe.com/en_US/AS2LCR/Flash_10.0/00001541.html</a>

MovieClipLoader
<a href="http://help.adobe.com/en_US/AS2LCR/Flash_10.0/00001541.html" target="_blank">http://help.adobe.com/en_US/AS2LCR/Flash_10.0/00001541.html</a>

Abraço.
0

#3 User is offline   Darkwader 

  • Group: Membros
  • Posts: 11
  • Joined: 07-April 09

Posted 07 April 2009 - 03:15 PM

e ai rodrigo obrigado pela resposta mas deixa eu explicar mais detalhado

Esse é a As que eu uso para redimencionar e funciona todo ok ( se o site fosse feito com mcs internos estaria pronto)

Para
CODE
//Inclui a classe tween
#include "mc_tween2.as"

//propriedades do Stage
Stage.scaleMode = "noScale";
Stage.align = "TL";

//Criamos o listener para o Stage
var listener:Object = new Object();

//Função que irá conter as ações pare redimensionar os mcs.
function stageResize ()
{
//topo
mcTopo._x = 0;
mcTopo._y = 0;
mcTopo.back2._width = Stage.width;
mcTopo._width = Stage.width;


mcBack2._x = 0;
mcBack2._y = 0;
mcBack2._width = Stage.width;
mcBack2._height = Stage.height;

container.xSlideTo( int(Stage.width/2 - container._width/2), 0.7, "easeoutquart");
container.ySlideTo( int(Stage.height/2 - container._height/2), 0.7, "easeoutquart");



//conteudo
mcLogo._x = Stage.width/2 - mcLogo._width/2;
mcLogo._y = Stage.height - mcLogo._height - 50;


}

//Verifica quando o Stage sofre alguma mudança
listener.onResize = function ()
{
//Assim chamamos a nossa função que organiza os objetos
stageResize();
}

//Adicionando nosso listener ao Stage
Stage.addListener(listener);
//chamando a função para iniciar
stageResize();



Para carregar o Sfw externo utilizei o codigo
CODE
import utils.LoadPP;

// criar um movieClip para inserir a imagem:
this.createEmptyMovieClip("container", this.getNextHighestDepth());

// criando um listener para armazenar os métodos expostos pela classe LoadPP
var listener :Object = new Object();

var clipAlvo :MovieClip
var urlAlvo :String


// 1. Quando o carregamento começa
listener.onLoadStart = function():Void {
trace("o carregamento começou");
}
// 2. Durante o carregamento, a porcentagem carregada
listener.onLoadProgress = function(pct:Number):Void {
trace("está carreangdo... " + pct);
}
// 3. Quando acabou de carregar
listener.onLoadComplete = function(lo:LoadPP):Void {

clipAlvo = lo.getOndeCarreguei();
urlAlvo = lo.getOqueCarreguei();

switch(urlAlvo) {
case "novidades.swf":
// O que acabou de ser carregado
clipAlvo._xscale = clipAlvo._yscale = 100;
break;
case "../jpg/por-do-sol.jpg":
// O que acabou de ser carregado
clipAlvo._xscale = clipAlvo._yscale = 100;
break;
default:
clipAlvo._xscale = clipAlvo._yscale = 50;
}
}


// instanciando um objeto LoadPP:
var carregador:LoadPP = new LoadPP(listener);

// usando o método carregue:
carregador.carregue("novidades.swf", this.container);



Ele carrega perfeitamente porem por sua extremidade supeior esquerda

Assim como na imagem


Quando redimenciono o navegador ele fica centralizado como quero

Acho que o que eu preciso é um pequeno codigo que faça o swf carregar pelo seu centro no container inves pela extremidade superior esquerda


Att
0

#4 User is offline   Rodrigo Pixel 

  • Group: Moderadores
  • Posts: 1279
  • Joined: 07-May 07

Posted 07 April 2009 - 03:56 PM

Desculpa, mas desconheço a utilização dessa classe que você usou.
mc_tween2.as
LoadPP.as


De qualquer forma fiz um exemplo pra você usando MovieClipLoader e onResize.
Repare nos eventos onLoadInit e onResize, funciona normalmente.

No arquivo, tem um index.swf, que carrega o externo.swf dentro de um MC vazio criado dinamicamente no index.swf, depois de carregado e iniciado no stage posiciona esse MC no canto superior esquerdo do seu filme.
Caso houver evento de redimensionar stage, também irá reposicionar o objeto(externo.swf) no lugar definido.

Arquivo salvo versão Flash CS3:
http://rapidshare.com/files/218584483/onResize.zip.html

no arquivo index.fla tem apenas esse código inserido no 1° frame da timeline principal:
CÓDIGO
//adiciona isso no arquivo principal
Stage.scaleMode = "noScale"; //não sofrerá escala
Stage.align = "tl"; //alinhamento top left

//crio mc vazio que será alvo do swf externo
_root.createEmptyMovieClip("alvo", 0);

//ouvinte pro Stage
var ouvinteStage:Object = new Object();
Stage.addListener(ouvinteStage);//adiciono ouvinte de eventos do stage


//ouvinte pro objeto MovieClipLoader
var ouvinteMcl:Object = new Object();

//objeto MCL
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.loadClip("externo.swf", alvo); //carrego meu swf no mc
mcl.addListener(ouvinteMcl); //adiciono ouvinte de eventos do MCL

//quando estiver carregado e iniciado o stage, consigo manipular o arquivo
ouvinteMcl.onLoadInit = function(){
    onResizeStage();
    trace("swf externo carregou e iniciou no stage");
}

//quando redimensionar o stage, faça...
ouvinteStage.onResize = function(){
    onResizeStage();
    trace("redimensionou stage");
}

//manipulo posição do meu mc que recebe swf externo
function onResizeStage(){
    //faço algo
    alvo._x = 0;
    alvo._y = 0;
}


Abraços.
0

#5 User is offline   Darkwader 

  • Group: Membros
  • Posts: 11
  • Joined: 07-April 09

Posted 07 April 2009 - 04:42 PM

Oi Rodrigo

Dei uma olhada no seu codigo

A as tween2.as é para ter o efeito que o mc esta deslizando na tela ( é bem legal) ela faz com que o mc quando carregado saia sempre do x e y 0 para o ponto que você colocou na função rederize suave (se quiser te mando ela)no meu caso

container.xSlideTo( int(Stage.width/2 - container._width/2), 0.7, "easeoutquart");
container.ySlideTo( int(Stage.height/2 - container._height/2), 0.7, "easeoutquart");

o exemplo que vc me enviou na verdade acontece o mesmo que o meu exemplo

So que vc colocou o alvo em x e y =0 e o swf continua carregando pela extremidade, precisaria que ele carregasse pelo seu centro entendeu? vou ver se coloco um exemplo online e coloco aqui
0

#6 User is offline   Rodrigo Pixel 

  • Group: Moderadores
  • Posts: 1279
  • Joined: 07-May 07

Posted 07 April 2009 - 05:01 PM

Então, basta fazer a maipulação do jeito que você quer. Do jeito que foi explicado ficou um pouco confuso saber onde você quer posicionar exatamente. Pois você passou só o erro e não um exemplo da posição correta que você espera.


Segue o código atualizado no exemplo que passei, veja se assim dá certo:

Criei 2 mc vazios,...um será o container e outro alvo
O mc container recebe o mc alvo, que por sua vez o mc alvo recebe seu swf.
Depois manipulo o mc alvo que está no container. Ou seja, o mc alvo é agora seu swf externo que está no container.

CÓDIGO
//adiciona isso no arquivo principal
Stage.scaleMode = "noScale"; //não sofrerá escala
Stage.align = "tl"; //alinhamento top left

//crio mc vazio que será receberá o outro mc vazio com swf externo
_root.createEmptyMovieClip("container", 0);

//crio mc vazio que que sntro do container
_root.container.createEmptyMovieClip("alvo", 0);

//ouvinte pro Stage
var ouvinteStage:Object = new Object();
Stage.addListener(ouvinteStage);//adiciono ouvinte de eventos do stage


//ouvinte pro objeto MovieClipLoader
var ouvinteMcl:Object = new Object();

//objeto MCL
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.loadClip("externo.swf", _root.container.alvo); //carrego meu swf no mc
mcl.addListener(ouvinteMcl); //adiciono ouvinte de eventos do MCL

//quando estiver carregado e iniciado o stage, consigo manipular o arquivo
ouvinteMcl.onLoadInit = function(){
    onResizeStage();
    trace("swf externo carregou e iniciou no stage");
}

//quando redimensionar o stage, faça...
ouvinteStage.onResize = function(){
    onResizeStage();
    trace("redimensionou stage");
}

//manipulo posição do meu mc que recebe swf externo
function onResizeStage(){
    //faço algo
    //AQUI VOCÊ FAZ A MANIPULAÇÃO DO JEITO QUE VOCÊ PRECISAR
    _root.container.alvo._x = Stage.width/2-_root.container.alvo._width/2;
    _root.container.alvo._y = Stage.height/2-_root.container.alvo._height/2;
}


Se ainda não é isso, poste um link de exemplo. ou referencias pra termos uma idéia melhor do que é.


Abraços.
0

#7 User is offline   Darkwader 

  • Group: Membros
  • Posts: 11
  • Joined: 07-April 09

Posted 07 April 2009 - 05:24 PM

ja vou testar seu codigo

ja para adiantar segue o link onde esta hospedado o exemplo com erro

começa com uma cena que para no enter até ai esta ok depois que clica o enter vc vai notar ai redireciona a pagina e ve que fica certo


é um exemplo então não ligue para o visual


exemplo teste

Valeu muito obrigado mesmo pela ajuda e se der certo pode rolar um tuto sobre o assunto


Att


0

#8 User is offline   Rodrigo Pixel 

  • Group: Moderadores
  • Posts: 1279
  • Joined: 07-May 07

Posted 07 April 2009 - 05:48 PM

Entendi.

Nesse caso acho que é só questão de chamar a função stageResize(); no inicio.

Mas você deve chamar dentro do evento onLoadComplete, pois só quando carregado você consegue manipula-lo, antes disso ele vai chamar a função, mas o arquivo ainda não foi carregado, por isso não posiciona no inicio.

Fiz um pequena mudança ao inves de usar o evento onLoadComplete, usei o evento onLoadInit.

A diferença do onLoadInit é que ele após totalmente carregado e iniciado você consegue manipular com mais segurança.
O onLoadComplete ele só avisa que carregou por completo, mas não garante que o objeto esteja iniciado no stage, quando digo "iniciado" é o objeto está ativo visualmente no stage.
Mas veja se essa classe que você está usando aceita esse evento, do contrario, utilize onLoadComplete mesmo.

Obs: deixei comentada a linha antiga onLoadComplete.

Tente atualizar uma parte do seu código assim, veja se dá certo:



Para carregar o Sfw externo utilizei o codigo
CÓDIGO
import utils.LoadPP;

// criar um movieClip para inserir a imagem:
this.createEmptyMovieClip("container", this.getNextHighestDepth());

// criando um listener para armazenar os métodos expostos pela classe LoadPP
var listener :Object = new Object();

var clipAlvo :MovieClip
var urlAlvo :String


// 1. Quando o carregamento começa
listener.onLoadStart = function():Void {
trace("o carregamento começou");
}
// 2. Durante o carregamento, a porcentagem carregada
listener.onLoadProgress = function(pct:Number):Void {
trace("está carreangdo... " + pct);
}
// 3. Quando acabou de carregar
//listener.onLoadComplete = function(lo:LoadPP):Void {
listener.onLoadInit = function(lo:LoadPP):Void {

clipAlvo = lo.getOndeCarreguei();
urlAlvo = lo.getOqueCarreguei();

switch(urlAlvo) {
case "novidades.swf":
// O que acabou de ser carregado
clipAlvo._xscale = clipAlvo._yscale = 100;
break;
case "../jpg/por-do-sol.jpg":
// O que acabou de ser carregado
clipAlvo._xscale = clipAlvo._yscale = 100;
break;
default:
clipAlvo._xscale = clipAlvo._yscale = 50;

stageResize(); //executa função que posiciona os objetos
}
}


// instanciando um objeto LoadPP:
var carregador:LoadPP = new LoadPP(listener);

// usando o método carregue:
carregador.carregue("novidades.swf", this.container);


Abraços.
0

#9 User is offline   moiseslobato 

  • Group: Membros
  • Posts: 2
  • Joined: 17-October 11

Posted 18 October 2011 - 04:21 PM

Boa tarde amigos.
Sou novato na área e já peguei um "pepinão" pra resolver.
Estamos desenvolvendo um e-commerce e tenho um banner de destaque na home.

Este banner é em flash e tenho um MC que seria o background dele e outro onde fica o conteudo.
Logicamente preciso do background alinhado "TL" e o conteudo "MC".

Jà passei pelo forum por diversas vezes e não consigui encontrar exatamente o que queria.

No meu MC principal (background) onde chamo o conteudo coloquei o seguinte código:

Stage.scaleMode = "noScale";
Stage.align = "TL";
/*cria o mc para loudar arquivos */
_root.createEmptyMovieClip("news", _root.getNextHighestDepth());
/* carrega um determinado arquivo no mc que criamos na primeira linha */
_root["news"].loadMovie("banner-home.swf");
_root["news"]._x = (Stage.width/4.5) // Cordena X
_root["news"]._y = 0 //Cordenada Y

Não consegui indentificar onde estou errando, alguém pode por favor me ajudar. Tenho muita urgencia neste trabalho.

Por tudo que já li e vi por aqui, tenho certeza que não terão problemas em resolver para mim.

Abraço!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic



Publicidade




1 User(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)