[Ajuda/duvidas] aplicaçao em flash

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:
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?
 
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..
 
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... :)
 
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
 
bem... está aí uma confusao... nao estou a perceber... o
terias que colocar while(ZoomActivo=true) {}...
.

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
 
não seria while(ZoomActivo==true) {}?!? em vez de = ser == ?!

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:
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:
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
 
Back
Topo