..:: MX Studio Fóruns ::..: XML e posicionamento em colunas - ..:: 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

XML e posicionamento em colunas como posicionar items de coluna em coluna

#1 User is offline   abstrato 

  • Group: Membros
  • Posts: 50
  • Joined: 18-January 07

Posted 13 March 2008 - 06:24 AM

Olá todos,

alguém poderia me ajudar na seguinte questão: estou desenvolvendo um menu via XML e gostaria que este menu fosse organizado em diversas colunas, ainda não descobri que expressão teria que utilizar para que este posicionamento ocorra.

Vou dar um exemplo: digamos que tenho 12 MCs criados pelo XML, a primeira coluna terá 5 itens e ao detectar que tenho mais nodes no XML, o flash automaticamente criará a segunda coluna com mais cinco itens, e constatando que tenho ainda dois nodes sobrando ele criará a terceira coluna com somente dois itens. E assim por diante, com 12, 18, 30, 50 itens, a quantidade que seja.

um exemplo visual deste tipo de organização seria mais ou menos assim:

item 00 - item 05 - item 10 - item 15
item 01 - item 06 - item 11 - item 16
item 02 - item 07 - item 12 - item 17
item 03 - item 08 - item 13
item 04 - item 09 - item 14

a expressão que estou utilizando para o posicionamento no eixo _y é:

eval("menuItem"+i)._y = eval("menuItem"+(i-1))._y+72;

qual seria a das colunas?

***

Outra questão: gostaria de mover este grande MC de tamanho variável que seria formado ao conter todos os itens. Como faço para retornar o valor do tamanho final deste MC para os botões que moverão o MC horizontalmente? Seria algo como:

MCHolder._x = MCHolder._x - (MCHolder._width/numerodecolunas)

Obrigado a todos e um grade abraço.
0

#2 User is offline   abstrato 

  • Group: Membros
  • Posts: 50
  • Joined: 18-January 07

Posted 14 March 2008 - 06:11 AM

Finalmente encontrei a solução para a questão das colunas.

Resolvi postar aqui pois talvez possa interessar à alguém:

CÓDIGO
var numberRows:Number = 7;
var cellHeight:Number = 72;
var cellWidth:Number = Stage.width;
////
for (var i = 0; i<portfolioXML.childNodes[0].childNodes.length; i++) {
    //// menu layout configuration //
    eval("menuItem"+i).i = i;
    var cellX:Number = Math.floor(i/numberRows);
    var cellY:Number = i%numberRows;
    eval("menuItem"+i)._x = cellX*cellWidth;
    eval("menuItem"+i)._y = cellY*cellHeight;
}


No entanto duas questões ainda permanecem fritando meus miolos.

01. Gostaria de mover este grande MC de tamanho variável que seria formado ao conter todas as colunas. Como faço para retornar o valor do tamanho final deste MC para os botões que o moverão horizontalmente?

02. E agora, como faço para que isso tudo funcione no onResize?

Alguma dica?

Um abraço e abrigado à todos.
0

#3 User is offline   Natan 

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

Posted 15 March 2008 - 06:37 PM

Esse MovieClip de tamanho variável que vai receber as colunas seria qual MovieClip, menuItem? Você recupera o tamanho assim:

CÓDIGO
memuItem._width;
menuItem._height


Você quer fazer o que quando a função onResize for disparada?

[]s
0

#4 User is offline   abstrato 

  • Group: Membros
  • Posts: 50
  • Joined: 18-January 07

Posted 15 March 2008 - 08:14 PM

Na verdade, Natan, descreverei o efeito que pretendo para ficar mais fácil de entender o que estou tentando, desculpe pelo post longo:

Estou tentando misturar dois conceitos, o de carregamento do menu por XML e sliding menu (exemplo de sliding menu), cada coluna de 5 botões aparecerá uma por vez na tela pois terá a largura Stage.width.

Caso eu tenha 12 botões carregados do XML, por exemplo, terei três colunas de 5 botões. Para acessar a segunda coluna, ou a terceira, clicarei em setas abaixo desse menu que farão correr este grande MC (comprido na horizontal) formado pelas três colunas. Cada clique na seta, este grande MC correrá o valor de grandeMC._width/numeroDeColunas.

O tamanho do grandeMC será Stage.width*numeroDeColunas. E o numeroDeColunas será definido pelo XML. Como gostaria de que só aparecesse uma coluna por vez, independente da resolução do usuário, o tamanho dessas colunas deverá ser flexível, ou seja, deverá sofrer a interferência do onResize.

Compliquei demais a história? smile.gif

A pergunta é: como passo o valor de _width deste grandeMC para as setas e também para o onResize. E se o usuário mexer na janela, esse valor será atualizado para que se o layout se mantenha?

São questões ainda difíceis para mim, novato que sou.

Coloquei um dos rascunhos do site no media fire pra você entender (ainda sem XML ou onResize, é só um rascunho), clique nas setas (eu sei, tá correndo direto, não me preocupei com isso ainda) wink.gif

http://www.mediafire.com/?oyzc1phzn9e

Natan, muito obrigado, este fórum é um dos melhores muito por conta da atenção que você dispensa as pessoas que procuram ajuda por aqui. Não tenho dúvida disso.
0

#5 User is offline   Natan 

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

Posted 16 March 2008 - 02:54 PM

Agora entendi o que você quer fazer. O maior problema é, você já conseguiu usar o XML e montar esse slide menu?

Conseguindo usar o XML já fica bem mais fácil, para as colunas, você andaria quando clicar em um botão o tamanho de um botão. Por exemplo, se os botões tem o tamanho de 50px de largura (width), quando clicar na setinha de próximo andaria 50px para a esquerda.

Para o MovieClip do efeito, você terá que começar com um MovieClip em branco no palco, ele deverá ficar em branco para receber o MovieClip de seu conteúdo que deverá ser importado via attachMovie para cada item de um XML. Complicou? A lógica é mais ou menos parecida com essa galeria:

http://www.mxstudio.com.br/views.tutorial....d=3&aid=969

Conseguindo importar os MovieClips da biblioteca, você recupera o tamanho do MovieClip que antes estava vazio da forma que eu te passei. Ai é possivel interagir com o onResize e quando alguma seta for clicada. Entendeu mais ou menos o que disse?

[]s
0

#6 User is offline   abstrato 

  • Group: Membros
  • Posts: 50
  • Joined: 18-January 07

Posted 16 March 2008 - 05:30 PM

Já sim, já usei em outros projetos anteriores o sliding menu e o XML, os conheço relativamente bem, apenas relativamente, não sou nenhum expert. Só não havia misturado os dois antes. smile.gif

Bacana, vou estudar este tutorial que você me passou o link. De repente encontro minha solução lá.

Entendi perfeitamente, e é justamente isso que faria, attachMovie em um MC vazio. Mas a questão principal é que o onResize deverá atuar em dois momentos, tanto no espaçamento das colunas do swf do XML que será carregado, como no valor passado aos botões.

O espaçamento dessas colunas é Stage.width, ou seja se o usuário mexer na janela aumentando-a por exemplo, não é só o MC container que reposiciona, o espaçamento das colunas aumenta também, mas acontece que esse swf que tem as colunas tá dentro do MC container. Ou seja, consigo fazer com que o onResize reconheça e interfira em tempo real no MC container, não no tamanho das colunas do swf que está dentro dele. Entendeu o problema? Meio complicado, não é?

Vou fazer o seguinte, estudarei o link que você me passou, testarei algumas soluções que ainda não tentei, e dou nóticias por aqui, tendo conseguido (tomara que sim) ou não.

Se conseguir posto a solução pra quem quiser ver.

Mais uma vez obrigado.

Um abraço. abstrato
0

#7 User is offline   Natan 

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

Posted 16 March 2008 - 09:08 PM

O maior problema é que os MovieClips são importados da biblioteca dinamicamente e possuem nomes diferentes. Para que você recupere o tamanho de um deles, você teria que criar um Array que armazenasse os nomes desses MovieClips, e depois você recuperava eles. Algo mais ou menos como isso:

CÓDIGO
var mcs:Array = new Array();
var atual:Number;
for (var i:Number=0; i<4; i++) {
   var mc:MovieClip = container.attachMovie("item"+i, _root.getNextHighestDepth());
   mcs.push(mc);
}
var listener:Object = new Object();
listener.onResize = function() {
   trace(container.mcs[atual]);
};
Stage.addListener(listener);


Com isso talvez o Flash consiga retornar corretamente o item atual que está sendo exibido, lembre-se de quando mudar o item mudar a variável atual para o número atual do MovieClip sendo exibido. Mas é algo parecido, não sei se funciona, mas a lógica é essa.

[]s
0

#8 User is offline   abstrato 

  • Group: Membros
  • Posts: 50
  • Joined: 18-January 07

Posted 17 March 2008 - 01:46 PM

Legal,

esta me parece uma solução mais provável. Em breve dou notícias.

Gracias.

Até . abstrato
0

Share this topic:


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


Similar Topics Collapse


Publicidade




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