Autor Tópico: [Duvida] Flash Developer (Ciclo nos links) [resolvido]  (Lida 2849 vezes)

Offline gimbras

  • Emblema de Prata
  • ****
  • Mensagens: 1105
    • Ver Perfil
    • NoFuturo.com
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« em: 3 de Abril de 2006, 16:47:55 »
Oias!

Ando a linkar montes de movieclips e resolvi usar um ciclo FOR (que de resto já é usado para chamar os movieclips). E usar a variável criada no meio do URL para facilitar as coisas.

O problema é que não sei concatenar parte do url com a referida variável.

O AS é o seguinte:

Código: [Seleccione]
for (var i:Number = 1;i<=20;i++){
this["mc_"+i].onRollOver = function() {
 var numero:Number = Number(this._name.split("_").pop());
 this.onEnterFrame = function () {
  _root["cap"+numero]._alpha += (100-_root["cap"+numero]._alpha)/3;
  _root["cap"+numero]._x -= (_root["cap"+numero]._x-_xmouse)/2;
  _root["cap"+numero]._y -= (_root["cap"+numero]._y-_ymouse)/2;
 };
};
this["mc_"+i].onRollOut = function() {
 var numero:Number = Number(this._name.split("_").pop());
 this.onEnterFrame = function() {
  _root["cap"+numero]._alpha += (0-_root["cap"+numero]._alpha)/3;
 };
};
};

mc_1.onRelease = function () {
getURL("teste.php?where=1", "_self")
}


Ora são montes de movieclips e andar a linká-los um a um demora bastante.

Pensei em criar outro ciclo FOR deste género:

Código: [Seleccione]
for (var i:Number = 1;i<=20;i++){
this["mc_"+i].onRelease = function() {
getURL("teste.php?where=1", "_self")
};
};


Mas isso só linkaria todos os mc ao mesmo url. Eu queria que cada mc tivesse um url onde a parte where=1 fosse sendo somado 1 valor. Ou seja, o mc_1 ia para where=1, o mc_2 para where=2, etc...

Mas não sei se isto está certo nem como colocar a var i no meio do endereço.

Peço então a vossa ajuda.

Cumps.

Offline Grettir

  • Aprendiz
  • **
  • Mensagens: 284
    • Ver Perfil
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #1 em: 3 de Abril de 2006, 21:46:41 »
Heyas,

substituis o 1 por "+i+"

incluindo as "ASPAS".

Fica bem
----------------------------------
Ricardo Castelhano aka Grettir

Adobe Certified Professional
Interactive Designer
Flash Developer
PHP Developer

http://www.ricardocastelhano.com/
-----------------------------------
Keep on "Flashing..."

Offline gimbras

  • Emblema de Prata
  • ****
  • Mensagens: 1105
    • Ver Perfil
    • NoFuturo.com
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #2 em: 3 de Abril de 2006, 23:04:40 »
Mas assim:

Código: [Seleccione]
for (var i:Number = 1;i<=20;i++){
this["mc_"+i].onRelease = function() {
getURL("teste.php?where="+i"", "_self")
};
};


O primeiro link fica 21, em vez de 1.

Já tentei criar uma nova variável com outro nome, mas o link gerado é sempre 21.

Além disso eu queria poder escolher a partir de que número o link começava. Ou seja, estes links serão relacionados com IDs de uma tabela na base de dados.

Eu tenho vários MCs mc_1, mc_2 onde acontece o primeiro ciclo FOR que gera o efeito alpha e depois queria outro ciclo FOR para linkar cada MC a um id que fosse sendo incrementado por mais 1. Mas a partir de um número que eu definisse.

Estilo mc_1 ia ser linkado a teste.php?where=382, o mc_2 seria linkado a where=383 e por aí em diante.

Como fazer isso?

Cumps.

Offline gimbras

  • Emblema de Prata
  • ****
  • Mensagens: 1105
    • Ver Perfil
    • NoFuturo.com
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #3 em: 4 de Abril de 2006, 23:29:47 »
Bom,

já descobri a resposta.

Temos de obter o valor actual da variável 'i' que está a ser incrementada (que está a ser contada), e não o seu valor na hora que o onRelease é chamado. Para fazer isto, existe a função assignLink() que obtem a variável 'i' como um parâmetro e usa-la para o link. Porque o parâmetro é passado como um valor, ele irá conter o valor real de  'i'.

O número a partir do qual vamos começar a adicionar valores para os links serem gerados é o segundo parâmetro. Temos de ter em atenção o parâmetro linkID. De momento está codificado, mas pode ser um número vindo de uma base de dados.
Só temos também de ter em atenção que o valor obtido com o linkID é um número a mais do que o número com o qual iniciamos a contagem, porque se soma sempre o valor da variável 'i' em cada chamada. Portanto para ter o linkID a começar em 381, o parâmetro tem de ser 380.

Código: [Seleccione]
function assignLink(mcID:Number, linkID:Number){
_root["mc_"+mcID].onRelease = function(){
getURL("test.php?where="+linkID+"", "_self");
}
}

// chamada a partir de um ciclo
for (var i:Number = 1;i<=20;i++){
// ...
assignLink(i,380+i);
// ...
}


Resolvido.
Cumps.

Offline alftuga

  • Aprendiz
  • **
  • Mensagens: 202
    • Ver Perfil
    • http://www.alftuga.net
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #4 em: 5 de Maio de 2006, 13:31:53 »
Desculpa mas não me parece coisa muito bonita ao meu ver...
os dados que recebes via bd arrumar tudo dentro de um Array

var bd:Array = new Array(dads1,dads2,dads3)

for (var i:Number = 1;i<=bd.length;i++){
    _root["mc_"+i].linkID   = bd;
    _root["mc_"+i].onRelease =get;
}

function get(){
        getURL("test.php?where="+this.linkID+"", "_self");
}

Offline gimbras

  • Emblema de Prata
  • ****
  • Mensagens: 1105
    • Ver Perfil
    • NoFuturo.com
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #5 em: 5 de Maio de 2006, 15:31:45 »
Mas eu não vou receber dados de nenhuma BD. Vou é linkar todos os movieclips e depois vou à BD e insiro os registos de acordo com os links acabados de criar no flash.

Offline alftuga

  • Aprendiz
  • **
  • Mensagens: 202
    • Ver Perfil
    • http://www.alftuga.net
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #6 em: 5 de Maio de 2006, 16:31:12 »
não entendo muito bem o que tu chamas por linkar
no entanto continuo a dizer que é melhor atribuir uma variavel os teus botões num unico cyclo sem chamar 20 vezes uma função.

Offline gimbras

  • Emblema de Prata
  • ****
  • Mensagens: 1105
    • Ver Perfil
    • NoFuturo.com
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #7 em: 5 de Maio de 2006, 17:54:51 »
Aquilo que eu tenho são 150 mapas de 150 países. Cada país está dividido em regiões. Em média cada país tem 20 regiões. Cada região é um movieclip.

Quando passas o rato por cima de uma região aparece uma legenda que sobrevoa a região indicando o seu nome. Cada legenda é outro movieclip.

O ciclo foi criado para não estar a colocar código região por região uma a uma. Se são 150 países imagina o trabalho...

Depois veio a partir de ao clicar numa região a página onde estava o mapa ir dar a outra página com anúncios referentes a essa região ou a um mapa dessa mesma região com ainda mais divisões.

Daí ter sido criado ainda outro ciclo para que todas as regiões tivessem links e não andar a linkar uma a uma de novo.

O flash não está ligado à BD por isso não pode ir buscar dados nenhuns à mesma.

O que eu faço é atribuir um link a uma região e depois inserir manualmente o nome da mesma na base de dados.

Não sei se ambos estamos a dizer a mesma coisa mas...agradeço a ajuda e dou-te as boas-vindas ao fórum.

Cumps.

Offline alftuga

  • Aprendiz
  • **
  • Mensagens: 202
    • Ver Perfil
    • http://www.alftuga.net
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #8 em: 6 de Maio de 2006, 00:07:40 »
Obrigado pelas boas vindas.

No caso dos mapas como tens sempre uma forma diferente na regiões é logico que não possas fazer grande coisa a esse nivel tem que ser manualmente.

Sobre as legendas ai eu teria tomado uma outra opção um unico movie que se posiciona na região num onRollOver.

Eu so levantei a questão porque utilizar uma função dentro de um cyclo para criar esses links?

Se podes registar os teus links directamente para dentros dos botões com um cyclo.

Da mesma maneira que inseres para dentro da tua função argumentos (gerador links).
Podes inserir esses tais links para dentro dos botões sem passar pela função.

Não entendo a utilidade de criar uma função para fazer tal coisa.

Repara que no script que escrevi eu estou a inserir dados dentro dos botões. E posso perfeitamente aceder a eles quando faço onRelease.

Mas poderias fazer a mesma coisa com outros dados do estilo:

for (var i:Number = 1;i<=20;i++){
_root["mc_"+i].linkID = 380+i;
_root["mc_"+i].onRelease =get;
}

function get(){
getURL("test.php?where="+this.linkID+"", "_self");
}

não estou a dizer que o teu codigo esta mau mas sim mais complicado e mais obscuro o nivel lectura.

Por outras razões tb pode ser util (não sempre) ter um nome na função.

Mais um promenor (não muito importante) a maneira que escrevestes isso crias 20 funções anonimas e a minha maneira so tens uma e referenciada isso o nivel memoria tem algumas diferenças.


ps:
desculpa pelo portugés
segunda volto por aqui... ;)

Offline gimbras

  • Emblema de Prata
  • ****
  • Mensagens: 1105
    • Ver Perfil
    • NoFuturo.com
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #9 em: 6 de Maio de 2006, 13:34:38 »
Bom obrigado pelas dicas. Mas foi assim que me desenrasquei. Também ando muito no início do ActionScript e foi assim que me deram uma ajuda. O código original do efeito das legendas teria de ser movieclip a movieclip e depois lá me deram a dica do ciclo para isso. E a seguir é que surgiu a necessidade de criar links para cada região.

Eu depois mostro como ficou.

Obg pela ajuda, por acaso nunca tinha visto um código do teu género a chamar a função get.

Cumps.

Offline Grettir

  • Aprendiz
  • **
  • Mensagens: 284
    • Ver Perfil
[Duvida] Flash Developer (Ciclo nos links) [resolvido]
« Responder #10 em: 7 de Maio de 2006, 00:52:14 »
Heyas,

GIMBRINI já estou farto de te explicar que sempre que encontrares a palavra FUNCTION quer dizer que é um método inventado pelo programador!!

Nao é algo predefinido!!

Fica bem
----------------------------------
Ricardo Castelhano aka Grettir

Adobe Certified Professional
Interactive Designer
Flash Developer
PHP Developer

http://www.ricardocastelhano.com/
-----------------------------------
Keep on "Flashing..."

 




Roleta das Anedotas - Abre noutra janela