Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luis Henrique Rodrigues

[Resolvido] Component ProgressBar e ScrollPane no Flash 8

Recommended Posts

Olá a todos.

 

Estou com um problema master.

Esou fazendo um site em flash e precisava de uma area de imagens com barra de rolagem horizontal

Estou usando o Flash 8, e pelas condições do site resolvi usar o componente ProgressBar e o ScrollPane.

Achei um código que tinha resolvido meu problema:

 

stop();
// Create a listener object event function. The progress bar is an object so needs an object function to work
myProgressBarListener = new Object();

// When the progress bar is complete and has preloaded the Scroll Pane component content, the listener will call and run this code below:
myProgressBarListener = function (eventObject) {

    // Hide the progress bar now as we don't need it any more
    myProgressBar._visible = false;

// Closes the above function
};
//

//
// Set the location of the content to be loaded
myScrollPane.contentPath = "movie.swf";

// Declares a listener that detects when the progress bar component has loaded the loader component content and is complete. Then calls the function myProgressBarListener
myProgressBar.addEventListener("complete", myProgressBarListener);

// Set up the progress bar component variable to polled mode.
myProgressBar.mode = "polled";

// The location of the Scroll Pane Component
myProgressBar.source = "myScrollPane";

// Sets the conversion to 1. This basically means the component divides the current and total values loaded and to be loaded. Then it floors them (works out the difference between them) and displays the converted value in the label property
myProgressBar.conversion = "1";

// Set the label to display the word 'loading' followed by the percentage value loaded so far
myProgressBar.label = "carregando imagens %3%%";

// The direction the progress bar moves when loading
myProgressBar5.direction = "right";

// The location of the label that displays the percentage loaded so far
myProgressBar.labelPlacement = "bottom";

// Stop the movie at the frame until the move has been preloaded
stop();
, só que criou-se outro problema. Tem vez que ele carrega o filme e não o coloca dentro do ScrollPane.

Geralmente quando isso acontece o ProgressBar também não funciona.

O site é este daqui: http://celavi.com.br...drigues.com.br/

Aguardo os comentários

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que re setar o scroller e o progress a cada vez que você chamar para mudar o conteudo

 

Caso contrario deixam de existir mesmo, pois não existe mais o conteudo no qual eles foram setados anteriormente.

Por isso é recomendado o uso de funções que são chamadas a cada vez que você vai executar uma ação... para não causar esse tipo de problemas.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, muito obrigado.

 

Não manjo muito de action script, porém pesquisei e encontrei essa ação: reset()

Estou usando mais de uma vez o scrollpane e o progressbar, então antes eu tinha dado diferentes instancias para cada um (para tentar dar cabo ao problema).

No meu movie, para cada ProgressBar e Scrollpane novo eu adiciono um numero na frente, Ex: Scrollpane1, Scrollpane2, e assim por diante.

 

Então no meu movie eu adicionei esse código antes de toda a action que usa o progressbar e o scrollpane:

 

myProgressBar.reset();
myScrollPane.reset();

E fiz assim com todos.

Testei localmente e está funcionando bem, agora na web ele está pior do que antes.

Qual seria a action correta neste caso?

Aguardo os comentários

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom eu faço assim:

 

stop();
//Get my url images patch
var url:String = String("http://www.seusite.com/swf/");
//Start my counter
var num:Number = 1;
//My Load Listener
var loadListener:Object = new Object();

//Make my web secure domain
System.security.allowDomain('http://www.seusite.com/');

// Create a listener object event function. The progress bar is an object so needs an object function to work
myScrollPane.setSize(550, 350);


function init(){
    myScrollPane.contentPath = url + 'nome da imagem ou array'+ num +'.jpg';    
    loadListener.progress = function(evt_obj:Object) {
        myProgressBar.mode = "polled";
        myProgressBar.source = myScrollPane;
        myProgressBar.conversion = 1024;
        myProgressBar.label = "%1 of %2 KB loaded";
        myProgressBar.setProgress(myScrollPane.getBytesLoaded(), myScrollPane.getBytesTotal());
    };
    myScrollPane.addEventListener("progress", loadListener);

}
init();

proximo.onPress = function(){
    if(num == 9){
        num = 1;
    }else {
        num++;
    }
    init();
}

anterior.onPress = function(){
    if(num == 1){
        num = 9;
    }else {
        num--;
    }
    init();
}

Detalhe funciona online

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo,

 

Mas não entendi como poderia aplicar o seu código ao meu.

Como disse, encontrei esse código pesquisando e preciso que o componete leia o arquivo corretamente, tanto o scrollpane, quanto o progressbar.

 

Me disse que era so restar que ele funcionaria.

O código está posicionado em cada frame que puxa o filme, dentro da timeline.

Os botões estão programados para ir até um determinado frame e de lá é puxado o filme a partir do código:

stop();
// Create a listener object event function. The progress bar is an object so needs an object function to work
myProgressBarListener = new Object();

// When the progress bar is complete and has preloaded the Scroll Pane component content, the listener will call and run this code below:
myProgressBarListener = function (eventObject) {

    // Hide the progress bar now as we don't need it any more
    myProgressBar._visible = false;

// Closes the above function
};
//

//
// Set the location of the content to be loaded
myScrollPane.contentPath = "movie.swf";

// Declares a listener that detects when the progress bar component has loaded the loader component content and is complete. Then calls the function myProgressBarListener
myProgressBar.addEventListener("complete", myProgressBarListener);

// Set up the progress bar component variable to polled mode.
myProgressBar.mode = "polled";

// The location of the Scroll Pane Component
myProgressBar.source = "myScrollPane";

// Sets the conversion to 1. This basically means the component divides the current and total values loaded and to be loaded. Then it floors them (works out the difference between them) and displays the converted value in the label property
myProgressBar.conversion = "1";

// Set the label to display the word 'loading' followed by the percentage value loaded so far
myProgressBar.label = "carregando imagens %3%%";

// The direction the progress bar moves when loading
myProgressBar5.direction = "right";

// The location of the label that displays the percentage loaded so far
myProgressBar.labelPlacement = "bottom";

// Stop the movie at the frame until the move has been preloaded
stop();

Não seria melhor eu resolver neste código este problema, já que estou a mexer nele?

Então será que se eu resetasse (como disse) ele não funcionaria corretamente?

Li em outros forums que para resolver esse problema precisaria baixar o filme e depois jogá-lo dentro do scroolpane, assim ele leria corretamente o tamanho do arquivo e não daria problema. Mas se puder resolver de outro modo seria melhor.

Obrigado pelas ajudas e aguardo novo comentário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece que nesse código ai a solução é a que eu passei...

 

Não existe reset!!!

 

Você tem que setar denovo como eu faço em minha função...

 

Só que eu criei uma função de ir e voltar com botões... ao invés disso você faz um loop que vai chamar a função...

 

Assim:

stop();
//Get my url images patch
var url:String = String("http://www.seusite.com/swf/");
//Start my counter
var num:Number = 0;
//My Load Listener
var loadListener:Object = new Object();

//My array that contain my swf/img to load
var arr:Array = new Array('img1.jpg','img2.jpg','img3.jpg','img4.jpg');

//Make my web secure domain
System.security.allowDomain('http://www.seusite.com/');

// Create a listener object event function. The progress bar is an object so needs an object function to work
myScrollPane.setSize(550, 350);

function init(){
    myScrollPane.contentPath = url + arr[num];    
    loadListener.progress = function(evt_obj:Object) {
        myProgressBar.mode = "polled";
        myProgressBar.source = myScrollPane;
        myProgressBar.conversion = 1024;
        myProgressBar.label = "%1 of %2 KB loaded";
        myProgressBar.setProgress(myScrollPane.getBytesLoaded(), myScrollPane.getBytesTotal());
        myProgressBar.addEventListener('complete', loadListener);
    };
    loadListener.complete = function(){
        if(num <= 10){
            num++
            init();
        }            
    }
    myScrollPane.addEventListener("progress", loadListener);

}
init();
Isso vai carregar varias imagens em sequencia... trocando a barrinha do progress bar a cada novo inicio.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, estamos quase lá.

Eu usei o código que me passou.

Eu fiz um movieclip para o conjunto das imagens.

Sendo assim preciso que ele chame um movieclip, insira no ScrollPane e beleza.

Então alterei o código assim:

 

//My array that contain my swf/img to load
var arr:Array = new Array('res_01.swf');

Onde ele chama um unico movieclip.

No entanto, me parece ele chama outros movies, que acredito vir dessa linha:

 

loadListener.complete = function(){
        if(num <= 10){
            num++
            init();

        }            
    }

Posso estar bem errado, pois não conheço programação, mas preciso resolver essa pendencia.

Como faria então para ele chamar um movieclip externo, inserir na ScrollPane contando o loading pelo ProgressBar e assim que terminar mostrar o MC no ScrollPane?

 

Atenciosamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

..........

 

Desde o começo entendi que seriam mais de 1 SWF

Se é mais de um só alterar esse num <= 10 o 10 pelo numero total de SWF's que você ta colocando na array...

 

Se você vai por 1 só... nem precisa do loadListener.complete

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não consegui.

Vou deixar mais claro.

 

Eu tenho um movie principal

Dentro dele, na timeline, quando ele esta (por exemlpo) na timeline 1, ele chama o filme1, qunado esta na timeline2, chama o filme2, e assim por diante.

 

Usei o código que postei e estava funcionando bem, mas as vezes (e não é sempre) o scrollpane e o progress bar deixa de funcionar.

 

Não consegui usar o código que me passou. Tentei algumas vezes e não deu certo.

 

Pra facilitar, vou disponibilizar o arquivo que estou mexendo: http://celavi.com.br/moviex.zip

 

Dentro do filme na label actionsImagens está inserido os códigos que puxam os filmes. Do res_01 ao inst_07 esta com o seu código, a partir do serv_01 está o meu antigo.

 

Preciso resolver esse pepino e me parece que você pode me ajudar

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro você ta fazendo errado......

 

Você ta tentando usar um array... sem passar qual o parametroq ue ele vai procurar...

 

O correto do código já que você vai usar ele ficaria assim:

stop();
//Get my url images patch
var url:String = String("http://www.padovanirodrigues.com.br/");
//My Load Listener
var loadListener:Object = new Object();
//My array that contain my swf/img to load
var swf:String = new String('res_02.swf');
//Make my web secure domain
System.security.allowDomain('http://www.padovanirodrigues.com.br/');
// Create a listener object event function. The progress bar is an object so needs an object function to work
myScrollPane.setSize(470, 398);

function init(){
    myScrollPane.contentPath = url + swf;  
    loadListener.progress = function(evt_obj:Object) {
        myProgressBar.mode = "polled";
        myProgressBar.source = myScrollPane2;
        myProgressBar.conversion = 1024;
        myProgressBar.label = "carregando imagens %3%%";
        myProgressBar.setProgress(myScrollPane2.getBytesLoaded(), myScrollPane2.getBytesTotal());
    };
    myScrollPane.addEventListener("progress", loadListener);
}
init();

E você pode deixar a mesma instancia desde o começo e interromper alguns frames que isso não da problema nenhum...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então berseck,

 

Não consegui usar esse código, pois bem, voltei a usar o meu de antes.

Ele agora parece estar funcionando bem: http://padovanirodrigues.com.br/

 

Mas essa questão ainda é importante para mim. Não sou programador, no entanto, quero saber como essas coisas funcionam. Quero dizer: acho que poderiamos ir até o fundo disso. Assim: o que exatamente estava (ou ainda está) errado no meu código. Talvez por ele ter sido feito para lodear .jpg?

 

Achei esse código dentro dessa seção: http://www.webwasp.co.uk/tutorials/preloaders/index.php, mas precisamente aqui: http://www.webwasp.co.uk/tutorials/b49-preload-scrollPane/tutorial.php

 

Não achei nehum outro tópico neste assunto nem outra maneira de fazer uma área com scrollbar lodear um filme externo. Na minha pesquisa achei somente esse tutorial-código de referência.

 

É isso, espero continuarmos nessa busca de programações melhores.

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só dar uma olhada no help do flash você vai ver como faz...

Ele mesmo explica

 

E o código que eu usei... testei sem ser no seu problema... testei no seu...

E todos funcionaram perfeitamente bem

Sem nenhum erro -.-

 

Vou disponibilizar um arquivo funcionando pra você ver que o problema não está no código!

 

Click aqui

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, pode crer.

O pau aparece com muita fraquencia quando é conecção de banda larga.

 

Outra coisa: Eu preciso renomear os scrollpanes no código e no próprio, ou posso deixá-los com o mesmo nome em todos? isso altera algo?

Agora uma opção interessante para mim seria lodear esse filme e depois jogá-lo dentro do scrollpane, achei até um código só que sem loader, então não usei.

 

Como usar o seu modelo de código para um action em um determinado frame, para chamar um swf dentro do scrollpane com o preloader do flash?

 

Abraços man!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué só copiar e colar o exemplo... trocar a URL

E a string que recebe...

 

No caso eu uso um contador... pq tenho varias imagens, você não precisa de varias imagens... pode usar sem o contador

 

Se já tem o código agora você tem que fazer né...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois bem, acredito que esta não seja a resposta que gostaria de ouvir, porém tentei algumas vezes o código e por estar dando muita dor de cabeça , decidi pela maneira que conheço melhor: peguei um arquivo na net de uma area rolavel e estou substituindo os filmes, sem usar componente nenhum.

Obrigado pela ajuda e atenção e numa próxima vez sei que possocontar com tu rapaz.

Mas foi assim, acho que agora dará certo.

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.