1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Ajuda/duvidas] aplicaçao em flash

Discussão em 'Web Development' iniciada por Sérgio Lopes, 28 de Novembro de 2007. (Respostas: 9; Visualizações: 1094)

  1. Sérgio Lopes

    Sérgio Lopes Banido

    Boas
    estou a criar um prototipo para um gps (trabalhinho da faculdade) e tenho aqui alguns problemas que não consigo resolver (dado que sou um nabo em flash ando a aprender googlando por tuturials e assim)

    tenho esta função na frame actions:
    Código:
    function zoomOut(movieClip) {
    	
    	if(movieClip._yscale && movieClip._xscale > zoomMin) {		
    	  movieClip._xscale = movieClip._xscale - zoomIncrement;
    	  movieClip._yscale = movieClip._yscale - zoomIncrement;
    	  zoom = zoom - zoomIncrement;	  
    	}
    
    e dps tenho um botao de zoom com o seguinte codigo:
    Código:
    on(release){
    	_root.zoomOut(_root.Mapa);
    }
    só que eu queria que ao carregar no botão emquanto não o solta-se ele ficasse a fazer zoom.... isto é possivel? tentei por "on(press)" mas o resultado é o mesmo :(

    tenho aqui o swf e o fla

    dicas pra resolver problemas de drag n' drop também são bem vindas:)
     
    Última edição: 29 de Novembro de 2007
  2. msdevweb

    msdevweb Power Member

    Bom, o que te aconselho é criares uma função zoom, e quando carregar no botão activa a função, e só a desactiva com o on(release)... ou seja, do estilo, tena a função, zoom_in(estado), guardas por exemplo uma constante com o estado do zoom, tipo
    on(press) {
    estadoZoom="activo";
    zoom_in("inicia");
    }

    e no on(release) {
    estadoZoom="inactivo";
    zoom_in("para");
    }

    depois na função, se for para "iniciar", verificas se o estadoZoom="activo", se nao for, inicias o zoom, e dizes à variavel estadoZoom="activo";
    O mesmo ao contrario quando dizes "para".

    O estadoZoom é importante para evitar a activação da função zoom com repetidos clicks no botão, isto pode nao ser necessário para o teu exemplo... mas vê... e diz se conseguiste resolve o teu problema.

    Quanto ao drag & drop, o estilo é o mesmo que te disse em cima :) mas dentro da função, jogas com as posições do teu objecto "movivel" de acordo com as posições do cursor, tens acesso às coordenadas do cursor com o comando _xmouse e y_mouse. (se possivel usar no teu caso)

    Se quiseres ser mais directo, podes usar a propria função do flash que já tem a papinha feita e que serve mesmo para drag & drop, a função startDrag, que pode ser usado num objecto, tipo meu_objecto.startDrag(true); ou startDrag("meu_objecto", true);

    Seria isto?
     
  3. Sérgio Lopes

    Sérgio Lopes Banido

    bom o drag já está a funcionar são só mais uns retoques

    em relaçao ao zoom fui experimentar fazer isso do estado... fiz algo do genero

    function zoomIn(){
    while(ZoomActivo){
    ....
    }
    }

    e dps onPress metia a variavel a activo e chamava a função e onRelease metia o zoomActivo a falso...

    mas assim que chamo a função com zoomActivo a true ele diz que fica instável :S, existe alguma funçao tipo sleep de C em action script? só pra testar se isso o acalma..
     
  4. msdevweb

    msdevweb Power Member

    bem... está aí uma confusao... nao estou a perceber... o while(ZoomActivo) está a verificar só se a variavel está declarada... logo esteja a true ou false ele executa na mesma...

    terias que colocar while(ZoomActivo=true) {}...

    mas bom, para te poder ajudar mais devias colocar aqui o código... seria bem mais facil... :)
     
  5. Sérgio Lopes

    Sérgio Lopes Banido

    a função de zoomIn ficou
    Código:
    function zoomIn(movieClip) {
    	while(zoomActivo==true){
    		if(movieClip._yscale && movieClip._xscale < zoomMax) {
    
    	  	movieClip._xscale = movieClip._xscale + zoomIncrement;
    	  	movieClip._yscale = movieClip._yscale + zoomIncrement;
    	  	zoom = zoom + zoomIncrement;
    		}  //end if statement
    	}
    } //end zoomIn function
    e no botão meti:
    Código:
    on(press){
    	_root.zoomActivo = true;
    	_root.zoomIn(_root.Mapa);
    }
    
    on(release){
    	_root.zoomActivo = false;
    	_root.zoomIn(_root.Mapa);
    }
    a minha ideia é que ele a fazer zoom sozinho vai até ao maximo em menos de nada..e breaka... :s
    eu tava a espera de que já existise uma forma de raiz de fazer este tipo de coisa em flash...mas parece que não :S
     
  6. metRo_

    metRo_ Power Member

    não seria while(ZoomActivo==true) {}?!? em vez de = ser == ?!
    podias dar um exemplo de como ficaria isso a funcionar, eu percebi a ideia mas não como fazer..
    por exemplo:
    Código:
    function zoomOut(movieClip,estado){
        while(estado == 1){
        movieClip._xscale += 5;     
        movieClip._yscale += 5;
        }
    }
    
    eu testei e nao funcionou... :S
     
  7. msdevweb

    msdevweb Power Member

    Sim... nem reparei que tinha escrito mal...


    Bom, supostamente deveria funciona assim:

    Tens um botão zoom com o nome de "zoomItButton", crias um layer de Actions e fazemos o seguinte.

    Nota que as funções têm de estar sempre disponiveis ao longo de toda a duração do flash...

    function zoomIn(movieClip) {
    while(zoomActivo==true){
    if(movieClip._yscale && movieClip._xscale < zoomMax) {

    movieClip._xscale = movieClip._xscale + zoomIncrement;
    movieClip._yscale = movieClip._yscale + zoomIncrement;
    zoom = zoom + zoomIncrement;
    } //end if statement
    }
    } //end zoomIn function

    Aqui supostamente estará tudo bem, mas devias adicionar dentro do while um if(movieClip._yscale==ZoomMaxY) ZoomActivo=false; o mesmo para o _xscale para que se chegar ao maximo desactive o zoom.

    O zoomActivo convem tem que ser uma variavel global.

    os eventos on(press) e on(release) devem ser colocados neste mesmo layer actions, logo

    zoomItButton.onPress = function() {
    zoomActivo=true;
    zoomIn(Mapa);
    }
    e o mesmo para o release
    zoomItButton.onRelease = function() {
    zoomActivo=false;
    }

    Bom, entretanto andei à procura de uma solução para estes problemas e encontrei http://www.gogoat.com/2006/08/07/flash-zoom/ que vos será util, e provavelmente é o que procuram... já usei uma vez, e é bastante util e simples personalizar, e podem usar no vosso projecto bem como vos ajudar a entender... Na pagina que indiquei o zoom é feito atravez da roda "wheel" do rato. Vejam se era isso que queriam.
     
    Última edição: 1 de Dezembro de 2007
  8. metRo_

    metRo_ Power Member

    Neste momento não me esta a ser util, mas muito obrigado porque estou a fazer uma apresentação e para uma coisa vou precisar de algo parecido...

    Se puderes dar uma vista de olhos neste tópico: http://www.techzonept.com/showthread.php?t=215924

    Abraços
     
  9. Sérgio Lopes

    Sérgio Lopes Banido

    tentei o que disseste msdevweb ... ele cracha...
    criei um fla só pra testar isso.. podes velo aqui todo o codigo esta na layer action action as linhas que estao comentadas são as do while...pq sao as que fazem isto crachar...

    se alguem detectar o erro que me diga...
     
    Última edição: 1 de Dezembro de 2007
  10. Sérgio Lopes

    Sérgio Lopes Banido

    após ter pedido a esperança encontrei a solução por acaso noutro forum :P
    deixo aqui a solução pra possiveis interessados:

    Código:
    zoomOut.onPress = function(){
            ROOT.onEnterFrame = function(){
                    zoom._xscale*=0.9;
                    zoom._yscale*=0.9;
                    checkBounds(0,0,0,0);
            }
    }
    
    zoomOut.onRelease = function() {
            delete ROOT.onEnterFrame;
    }
    
    zoomOut.onReleaseOutside = function() {
            delete ROOT.onEnterFrame;
    }
    
    zoomIn.onPress = function(){
            ROOT.onEnterFrame = function(){
                    zoom._xscale*=1.1;
                    zoom._yscale*=1.1;
                    checkBounds(0,0,0,0);
            }
    }
    
    zoomIn.onRelease = function() {
            delete ROOT.onEnterFrame;
    }
    
    zoomIn.onReleaseOutside = function() {
            delete ROOT.onEnterFrame;
    }
    
    confesso que não entendo estes deletes..nem os onEnterFrame mas funcionou hehe
     

Partilhar esta Página