..:: MX Studio Fóruns ::..: Sistema de noticias em XML com tweens - ..:: 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

Sistema de noticias em XML com tweens Problemas com o AS para alterar o menu

#1 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 13 January 2009 - 01:33 AM

Eaeee pessoal... vim mais uma vez pedir ajuda de vcs!

Adaptei um sisteminha de banner que fiz, aproveitando que ele fazia uma trasição de fotos por fades e usando a classe tween, a intenção é transformar esse banner em um sisteminha de notícias. Ta quase completo, mais não consegui modificar o menu, ele executa uma função que faz com que os botões se repitam e gere números em cada botão, fazendo assim uma sequencia que representam a quantidade de fotos.

Acredito que dê para adequar. Ao invés de chamar os números, chamar o título da notícia. Acho que é no AS abaixo que está a solução.. unsure.gif

CÓDIGO
//Texto do botãozinho
menubtn.numero_txt.text = i + 1;


Segue o AS completo:

CÓDIGO
//Importando as classes para fazer os movimentos dinâmicos
import mx.transitions.*;
import mx.transitions.easing.*;

//Tirando o Scroll
function tirascroll()
{
    materiaAlt = materiaCompleta.materia._height;
    AlturaMascara2 = mascara2._height;
    if (materiaAlt < AlturaMascara2)
    {
        scrollbar2._visible = false;
    }
    else
    {
        scrollbar2._visible = true;
    } // end if
} // End of the function

//Aplicando a materia na mascara

materiaCompleta.setMask(mascara2);
setInterval(tirascroll, 100);


//Criando o xml e fazendo ele ignorar espaços em branco
var newsXML:XML = new XML();
newsXML.ignoreWhite = true;
//Quando o xml carregar com sucesso executar as funções
newsXML.onLoad = function(success:Boolean):Void  {
    //(o xml é carregado na última linha do script)
    if (success) {
        //Número total de news
        n_news = newsXML.firstChild.childNodes.length;
        /*O news_atual será o último pois ao executar a função de
        proximoNews() ele passará automaticamente para o 1º resultado*/
        news_atual = n_news;
        //Chamando o primeiro ticker
        proximoNews();
        //Criando o menu duplicando o quadradinho existente
        //Deixando o quadradinho base invisível
        menu._visible = false;
        //Pegando a posição inicial _x do menu
        var menu_y = menu._y;
        //Definindo a distância entre os botões
        var menu_dist = 25;
        //Criando um laço que gerará os botões do menu. Ele executa uma vez para cada ticker.
        for (var i:Number = 0; i < n_news; i++) {
            //Duplicando o movieclip menu
            //O depth é i+5 porque até o depth 4 existem mcs ocupando [fotomc1, fotomc2, legenda_mc, area_mc]
            var menubtn:MovieClip = menu.duplicateMovieClip("menu" + i, i + 5);
            //Movendo o botão duplicado no eixo x.
            menubtn._y = i * menu_dist + menu_y;
            //Número do ticker
            menubtn.numero = i;
            //Texto do botãozinho
            menubtn.numero_txt.text = i + 1;
            
            //Quando apertar o botão, mudar para ticker indicado
            menubtn.botao.onRelease = function():Void  {
                //Se o fade tiver terminado
                if (fotoIn.position == fotoIn.finish) {
                    vaiParaTicker(this._parent.numero);
                }
            };
        }
    } else {
        //Caso dê errado o carregamento, avise
        titulo_txt.text = "Ocorreu um erro";
    }
};

//Função que passa para o próximo ticker
function proximoNews():Void {
    //Se o ticker atual não for o último, aumenta em 1, se for ele vai para 0
    news_atual < n_news - 1 ? news_atual++ : news_atual = 0;
    insereDados(news_atual);
    //Limpando o intervalo de troca de news
    clearInterval(ticker_intervalo);
}
//Função que passa para o ticker anterior
function anteriorTicker():Void {
    //Mesmo esquema da outra função
    news_atual > 0 ? news_atual-- : news_atual = n_news - 1;
    insereDados(news_atual);
}
//Função que vai direto para um ticker, é o mesmo esquema das outras
function vaiParaTicker(numero_ticker:Number):Void {
    news_atual = numero_ticker;
    insereDados(news_atual);
}
//Função que insere os dados vindo do XML no nosso sitema
function insereDados(news_atual:Number):Void {
    //Adicionando os nós
    titulo_txt.text = newsXML.firstChild.childNodes[news_atual].childNodes[0].firstChild.nodeValue;
    dia_txt.text = newsXML.firstChild.childNodes[news_atual].childNodes[1].firstChild.nodeValue;
    materiaCompleta.materia_txt.text = newsXML.firstChild.childNodes[news_atual].childNodes[2].firstChild.nodeValue;
    carregaFoto(newsXML.firstChild.childNodes[news_atual].childNodes[3].firstChild.nodeValue);
}
//Criando os dois movieclips para carregar as fotos
this.createEmptyMovieClip("fotomc1", 2);
this.createEmptyMovieClip("fotomc2", 1);
//Posicionando os mcs no palco
fotomc1._x = fotomc2._x = area_mc._x;
fotomc1._y = fotomc2._y = area_mc._y;
//Definindo qual está em cima (por causa dos fades)
fotoCima = fotomc1;
//Função que carrega a foto e cria os fades
function carregaFoto(scr:String):Void {
    //Parando o fade da foto anterior caso ainda esteja ocorrendo
    fotoIn.stop();
    //Criando o mcloader
    var mclFoto:MovieClipLoader = new MovieClipLoader();
    //Carregando a foto
    mclFoto.loadClip(scr, fotoCima);
    //Quando terminar de carregar a foto
    this.onLoadInit = function():Void  {
        //Fazer o fadeIn com a foto de cima
        fotoIn = new Tween(fotoCima, "_x", Elastic.easeOut, 0, 55, 1, true);
        fotoIn = TransitionManager.start(fotoCima, {type:Iris, direction:Transition.IN, duration:1, easing:None.easeNone, startPoint:5, shape:Iris.SQUARE});

        //Quando terminar a transição de fotos
        fotoIn.onMotionFinished = function():Void  {
            //Pegar a foto de cima e jogar para trás
            if (fotoCima == fotomc1) {
                //Tirando a foto do fotomc2 que irá para frente
                mclFoto.unloadClip(fotomc2);
                fotomc1.swapDepths(fotomc2);
                //Ao ir pra frente estará preparado para receber outra foto
                fotoCima = fotomc2;
            } else {
                //Mesma coisa, caso seja o fotomc2 que estiver em cima
                mclFoto.unloadClip(fotomc1);
                fotomc2.swapDepths(fotomc1);
                fotoCima = fotomc1;
            }
        };
    };
    //Adicionando o listener ao mcloader
    mclFoto.addListener(this);
}
//Fazendo com que a area_mc fique invisível
area_mc._visible = false;
//Carregando o XML e dando início ao processo
newsXML.load("noticias.xml");
//
//Tirando menu do botão direito e bloqueando resize
Stage.showMenu = false;
Stage.scaleMode = "noScale";



E pra variar ainda to com problemas com esse scroll que utilizei, gostaria de usar aquele que o Hugo desenvolveu, mas não da certo.

para quem quiser visualizar o arquivo segue abaixo:

http://www.mcoeli.com.br/arquivos/news.zip



Abraços.
0

#2 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 13 January 2009 - 01:03 PM

Se você quiser manter os números você deixa essa linha. Para adicionar o título ao campo de texto que fica ao lado você coloca essa linha abaixo da linha que coloca o número no campo de texto:

CÓDIGO
menubtn.menu_txt.text = newsXML.firstChild.childNodes[news_atual].childNodes[0].firstChild.nodeValue;


[]s
0

#3 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 13 January 2009 - 02:27 PM

Boa Natan... era isso mesmo q estava imaginando, mas por algum motivo não rolava... aqui funfo certinho, mas ele repete o primeiro título ao invés de aplicar os títulos correspondentes as notícias. Como faço para quebrar essa repetição?

Obrigado.. abraço!
0

#4 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 13 January 2009 - 07:32 PM

Desculpe, tem que trocar o valor news_atual por i.

CÓDIGO
enubtn.menu_txt.text = newsXML.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;


[]s
0

#5 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 13 January 2009 - 09:12 PM

Imagina, valew pela forna Natan... tão fácil e eu quebrando a cabeça...

Uma dúvida, o [i] representa total?

Não consigo aplicar o comando do scroll no menu, vc sabe pq? Estou usando o scroll que o Hugo fez.

Abraço.
0

#6 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 13 January 2009 - 09:59 PM

O i é a variável que está sendo incrementada pelo for. Se olhar o código vai ver:

CÓDIGO
for (var i:Number = 0; i < n_news; i++) {


O i começa do 0 e vai até o valor da variável n_news (que provavelmente é uma variável que armazena a quantidade de nós que o XML possui). E a variável i é sempre incrementada quando chega ao final dos comandos do for.

Sobre o scroll, ele não funciona porque você usou uma instancia de MovieClip que não existe (se abrir o painel Parameters vai ver qual instancia está). Mas no seu caso, para que funcione corretamente o scroll, você teria que criar um MovieClip em branco, e dizer ao scroll para mover esse MovieClip, e modificar seu AS para importar o MovieClip da biblioteca nesse MovieClip vazio usando attachMovie (isso porque não tem como duplicar um MovieClip e move-lo para dentro de outro).

[]s
0

#7 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 13 January 2009 - 10:31 PM

Obrigado pela explicação Natan, entendi!

Então eu percebi q tava instanciado errado, usei o método que vc disse... instanciei um MC e disse para o scroll movimentar ele.

Me da uma ajuda na função attachMovie?

Coloquei junto com o for, mas acho q não está certo, não rolo...
CÓDIGO
for (var i:Number = 0; i < n_news; i++) {
alvoMenu.attachMovie("Menu", this.getNextHighestDepth());
alvoMenu["Menu"]._y = meuY = 100;
alvoMenu["Menu"]._x = meuX = 700;


"alvoMenu" é o MC em branco, e "Menu" é o MC que quero importar da biblioteca.

Abraço.
0

#8 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 14 January 2009 - 06:15 PM

Coloquei assim também, e não rolou sad.gif

CÓDIGO
_root.attachMovie("menu", "alvoMenu" ,1);
_root.onEnterFrame = function() {
    alvoMenu._x = _root._xmouse;
    alvoMenu._y = _root._ymouse;
};
alvoMenu.setMask("maskMenu");


Alguém entende o que se passa?
0

#9 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 14 January 2009 - 06:33 PM

Primeiro, você tem que dar um linkage ao MovieClip que era duplicado. Para fazer isso, você tem que abrir o painel Library (F11) achar ele, clicar com o botão direito do mouse e selecionar Properties. Selecione a opção Export for ActionScript (você acha ela clicando no botão Advanced), e no campo Identifier você coloca o nome de item.

Esse nome é o nome que você vai usar para identificar ele na biblioteca e importar ele via attachMovie. Depois de ter feito isso, você pode até apagar o MovieClip do palco pois não há necessidade de usar ele.

Agora, deixe suas ações assim:

CÓDIGO
for (var i:Number = 0; i < n_news; i++) {
    //Duplicando o movieclip menu
    //O depth é i+5 porque até o depth 4 existem mcs ocupando [fotomc1, fotomc2, legenda_mc, area_mc]
    var menubtn:MovieClip = vazio.attachMovie("item", "item"+i, vazio.getNextHighestDepth());
    //Movendo o botão duplicado no eixo x.
    menubtn._y = menubtn._height*i+10*i;
    //Número do ticker
    menubtn.numero = i;
    //Texto do botãozinho
    menubtn.numero_txt.text = i + 1;
    //Quando apertar o botão, mudar para ticker indicado
    menubtn.botao.onRelease = function():Void  {
        //Se o fade tiver terminado
        if (fotoIn.position == fotoIn.finish) {
            vaiParaTicker(this._parent.numero);
        }
    };
}


Teste ai e veja se funciona.

[]s
0

#10 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 14 January 2009 - 06:43 PM

Obrigado Natan,

Consegui aqui... mas sumiram os dados dos campos... os que chamei pelo XML. Pq?

Abraço.
0

#11 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 14 January 2009 - 06:52 PM

Faltou a linha que coloca o outro texto no campo de texto.

CÓDIGO
for (var i:Number = 0; i < n_news; i++) {
    //Duplicando o movieclip menu
    //O depth é i+5 porque até o depth 4 existem mcs ocupando [fotomc1, fotomc2, legenda_mc, area_mc]
    var menubtn:MovieClip = vazio.attachMovie("item", "item"+i, vazio.getNextHighestDepth());
    //Movendo o botão duplicado no eixo x.
    menubtn._y = menubtn._height*i+10*i;
    //Número do ticker
    menubtn.numero = i;
    //Texto do botãozinho
    menubtn.numero_txt.text = i + 1;
    menubtn.menu_txt.text = newsXML.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;
    //Quando apertar o botão, mudar para ticker indicado
    menubtn.botao.onRelease = function():Void  {
        //Se o fade tiver terminado
        if (fotoIn.position == fotoIn.finish) {
            vaiParaTicker(this._parent.numero);
        }
    };
}


[]s
0

#12 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 14 January 2009 - 07:12 PM

Verdade eu notei.. agora ta Ok.

Natan se não for pedir muito..eheh to com outro problema... esse é o último...

Gostaria que desse um reflex no scrollBar... por exemplo quando desco o scroll de uma notícia ao clicar em outra ele carrega a noticia na posição que esta, o certo seria ele subir tudo de novo... sabe como poderia arruma isso?

abraço.
0

#13 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 14 January 2009 - 07:53 PM

Dá sim, basta mudar a posição do MovieClip pan e acinar a função que move o conteúdo do Scroll.

CÓDIGO
for (var i:Number = 0; i<n_news; i++) {
    //Duplicando o movieclip menu
    //O depth é i+5 porque até o depth 4 existem mcs ocupando [fotomc1, fotomc2, legenda_mc, area_mc]
    var menubtn:MovieClip = vazio.attachMovie("item", "item"+i, vazio.getNextHighestDepth());
    //Movendo o botão duplicado no eixo x.
    menubtn._y = menubtn._height*i+10*i;
    //Número do ticker
    menubtn.numero = i;
    //Texto do botãozinho
    menubtn.numero_txt.text = i+1;
    menubtn.menu_txt.text = newsXML.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;
    //Quando apertar o botão, mudar para ticker indicado
    menubtn.botao.onRelease = function():Void  {
        //Se o fade tiver terminado
        if (fotoIn.position == fotoIn.finish) {
            vaiParaTicker(this._parent.numero);
        }
        scrollbar2.mover();
        scrollbar2.pan._y = scrollbar2.miny;
    };
}


[]s
0

#14 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 14 January 2009 - 08:12 PM

Grande Natan..rs

Deu certo aqui, obrigado... estou querendo incrementar um efeito de alfa no scroll, to usando o tween para dar o efeito, mas ele fica piscando... da uma olhada:

CÓDIGO
//Tirando o Scroll
function tirascroll()
{
    materiaAlt = materiaCompleta.materia_txt._height;
    AlturaMascara = maskMateria._height;
    if (materiaAlt < AlturaMascara)
    {
        var meuTween:Tween = new Tween(scrollBar, "_alpha", None.easeNone, 100, 0, true);
    }
    else
    {
        var meuTween:Tween = new Tween(scrollBar, "_alpha", None.easeNone, 0, 100, true);
    }
}
setInterval(tirascroll, 100);

0

#15 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 14 January 2009 - 09:45 PM

Na Classe Tween não é necessário usar intervalo, basta chamar apenas uma vez a animação.

CÓDIGO
//Tirando o Scroll
function tirascroll() {
    materiaAlt = materiaCompleta.materia_txt._height;
    AlturaMascara = maskMateria._height;
    if (materiaAlt < AlturaMascara)
    {
        var meuTween:Tween = new Tween(scrollBar, "_alpha", None.easeNone, 100, 0, true);
    }
    else
    {
        var meuTween:Tween = new Tween(scrollBar, "_alpha", None.easeNone, 0, 100, true);
    }
}
tirascroll()


[]s
0

#16 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 14 January 2009 - 10:26 PM

Valew Natan, mas não rolo aqui... não aconteceu nada... mas isso é de menos, posso usar o _visible.

Agora rolou outro probleminha... fui aplicar esses sisteminha no site que estou desenvolvendo e os scroll's ficaram lerdos... sabe dizer o que é?

minha estrutura é a seguinte, a página noticias.swf é externa, e desenvolvi o site em full borwser, será que isso influencia alguma coisa?

Obrigado Natan...

Abraço.
0

#17 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 15 January 2009 - 12:19 PM

Pessoal to postando link para que vcs vejam o que se passa:

Basta clicar em notícias no menu.

http://www.kacula.com.br/index_new.html


Obrigado.

0

#18 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 15 January 2009 - 12:27 PM

Eu sempre usei esse scroll em outros swf que uso e todos eles rodam redondo, nunca tive o problema que está tendo.

O que eu achei estranho é que se você mover o scroll do texto, o menu do lado move junto, o certo não é mover os dois, e sim mover apenas um. Pode ser esse o problema.

Tenta ver o que está fazendo mover os dois e veja se volta a funcionar.

[]s
0

#19 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 15 January 2009 - 09:15 PM

Encontrei o problema...

Eu tinha aplicado um tween no AS do scroll... queria que ele ficasse com o efeito "Back" no movimento do alvo. Tirando da certo, acaba o problema.

Mas vc sabe alguma forma de aplicar esse feito, ou corrigir o que fiz de errado?

Segue código:
CÓDIGO
import mx.transitions.Tween;
import mx.transitions.easing.*;
// coloca no tamanho normal
_xscale = _yscale = 100;
// pode ser um movieclip ou um textfield
var alvo = _parent[alvo];
// posição inicial do movieclip em y
var sy:Number = alvo._y;
// altera o tamanho da barra
track._height = track_height;
// coloca o botão de baixo abaixo da barra
btn_baixo._y = track._y + track._height;
// tira a maozinha dos botões
btn_baixo.useHandCursor = btn_cima.useHandCursor = pan.useHandCursor = false;

// mínimo em _y q o pan pode ir
var miny:Number = Math.round( track._y );
// máximo em _y q o pan pode ir
var maxy:Number = Math.round( track._y + track._height - pan._height );

// quando o cara pressionar o botão de cima
btn_cima.onPress = function () {
   subindo = true;
   descendo = false;
}
// quando tirar o mouse
btn_cima.onRelease = btn_cima.onReleaseOutside = function () {
   subindo = descendo = false;
}
// quando o cara pressionar o botão de baixo
btn_baixo.onPress = function () {
   subindo = false;
   descendo = true;
}
// quando tirar o mouse
btn_baixo.onRelease = btn_baixo.onReleaseOutside = function () {
   subindo = descendo = false;
}

// quando pressionar o pan
pan.onPress = function () {
   // inicia o arrastamento
   startDrag(this,false,this._x,miny,this._x,maxy);
}

// quando soltar o mouse
pan.onRelease = pan.onReleaseOutside = function () {
   // para o arrastamento
   stopDrag();
}

// cria o onEnterFrame
this.onEnterFrame = function () {
   // se estiver subindo
   if(subindo) {
      // se não estiver a ponto de ir além do que pode
      if(pan._y - 1 > miny) {
         pan._y--;
      } else {
         pan._y = miny;
      }
   }
   // se estiver descendo
   if(descendo) {
      // se não estiver a ponto de ir além do que pode
      if(pan._y + 1 < maxy) {
         pan._y++;
      } else {
         pan._y = maxy;
      }
   }
   // faz um switch para saber qual o tipo de objeto que estamos usando
   switch(typeof(alvo)) {
      // se for um movieclip
      case "movieclip":
      // Calcula
      var s:Number = ((pan._y-miny)/(maxy-miny))*100;
      var p:Number = (alvo._height - mascara)/100;
      /* Movemos o alvo */
      var tw:Tween = new Tween(alvo, "_y", Back.easeOut, alvo._y, sy-(p*s), 2, true);
};
}
/* Adicionamos o listener ao Mouse */
Mouse.addListener(mouseListener);


Abraço.
0

#20 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 15 January 2009 - 10:35 PM

Não tem nada de errado com as ações que você postou, se o problema é o efeito o melhor é tirar ele.

[]s
0

#21 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 16 January 2009 - 12:06 PM

Obrigado Natan, farei isso!

Na transição das fotos está dando um problema com o tween, ele da uma falha, tipo uma piscada quando troca de notícias... jas tive alguns proplemas com o tween em relação a isso. Sabe como resolver?

Abraço.
0

#22 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 18 January 2009 - 01:38 PM

Tentei acessar aqui as notícias mas ela não abre.

[]s
0

#23 User is offline   Thiago Vilela 

  • Group: Membros
  • Posts: 207
  • Joined: 08-August 08

Posted 18 January 2009 - 02:34 PM

É que eu havia tirado, coloquei novamente...

Depois que clica em várias notícias... ele da uma piscada na foto...

http://www.kacula.com.br/index_new.html

abraço.
0

#24 User is offline   Natan 

  • Group: Moderador Global
  • Posts: 7350
  • Joined: 28-February 04

Posted 18 January 2009 - 07:09 PM

Aqui rodou legal, pode ser que as vezes quando se testa localmente de essa travada, mas pelo menos quando testei aqui ficou normal.

[]s
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)