Comunidad de diseño web y desarrollo en internet online

¿Cómo avanzar frames mientras esté el boton presionado?

Citar            
MensajeEscrito el 07 May 2010 02:42 am
Hola, ¿Cuál es la forma más sencilla de avanzar en la línea del tiempo mientras esté presionado el botón del mouse?

Imaginen por ejemplo 3 frames: uno con una imagen de un 1, el otro con la de un 2, el otro con la de un 3. Quisiera presionar el botón del mouse y mantenerlo presionado mientras miro el 1 convertirse en 2, el 2 en 3...

Gracias por adelantado.

Por fernolo

23 de clabLevel



 

msie
Citar            
MensajeEscrito el 07 May 2010 06:48 am
podrias hacer un mouseDown y dentro de ese un enterFrame

Código ActionScript :

onClipEvent(mouseDown) {
onEnterFrame = function(){
trace("mouse pressed");
}
}


otra seria usando intervalos (setInterval) o usando getTime por si necesitas controlar mejor el tiempo entre una y otra

Por tribak

Claber

2448 de clabLevel

6 tutoriales

Genero:Masculino   Héroes

Fotógrafo o algo

firefox
Citar            
MensajeEscrito el 07 May 2010 12:36 pm
Hola, gracias por tu respuesta. Probé pero me da el siguiente mensaje:
"Clip events are permitted only for movie clip instances"
Actualmente yo avanzo en la línea el tiempo a través de un botón llamado botonalante:

Código ActionScript :

botonalante.onRelease = function () { 
if (this._parent._currentFrame < this._parent._totalframes) { 
gotoAndStop (this._parent._currentFrame + 10); 
} 
}; 


Yo necesitaría esto mismo pero en vez de tener que presionar una y otra vez el botón me gustaría que funcionase mientras estuviese presionado.

Gracias y espero nos puedas seguir ayudando.

Por fernolo

23 de clabLevel



 

msie8
Citar            
MensajeEscrito el 07 May 2010 03:49 pm
ok, onRelease no te permitira jamas lograr tu cometido, onRelease literalmente significa "alLiberar" no puedes detectar el "mantener presionado" con eso, usando la misma idea anterior...

Código ActionScript :

botonalante.onPress = function () {
onEnterFrame = function () {  
if (this._parent._currentFrame < this._parent._totalframes) {  
gotoAndStop (this._parent._currentFrame + 10);  
}  
}
}; 
botonalante.onRelease = function () {
delete this.onEnterFrame;
}


algo asi deberia hacer el truco

Por tribak

Claber

2448 de clabLevel

6 tutoriales

Genero:Masculino   Héroes

Fotógrafo o algo

firefox
Citar            
MensajeEscrito el 07 May 2010 06:31 pm
Hola. gracias otra vez pero desafortunadamente tampoco trabajó. Yo estoy superconvencido que OnRelease es un evento que ocurre cuando se libera (release) el mouse, el ejemplo que pongo es para que vean lo que yo quisiera obtener, pero sin presionar tantas veces el mouse. Es mi solución actual para avanzar los frames, pero quisiera que no fuera esta, sino otra diferente con otro evento.

Si pudieras probar la que me mandaste con un ejemplo simple tal vez averigues porque no trabaja, yo realmente no sé lo que pasa, tengo que aprender un poco más...

Gracias y si tienes un tiempo pon un ejemplito muy simple de 3 frames con lo que propones.

Un saludo.

Por fernolo

23 de clabLevel



 

msie8
Citar            
MensajeEscrito el 07 May 2010 07:49 pm
pues mas bien era por tu codigo, es _currentframe y desde donde lo llamas, no necesitas poner el this._parent

Código ActionScript :

stop();
botonalante.onPress = function() {
   onEnterFrame = function () {
      if (_currentframe<_totalframes) {
         gotoAndStop(_currentframe+10);
      } else {
         gotoAndStop(1);
      }
   };
};
botonalante.onRelease = function() {
   delete onEnterFrame;
};

Por tribak

Claber

2448 de clabLevel

6 tutoriales

Genero:Masculino   Héroes

Fotógrafo o algo

firefox
Citar            
MensajeEscrito el 07 May 2010 10:00 pm
Muchas Gracias Tribak, ya lo probé y funciona de maravillas. Me resultó muy útil tu ayuda.
Un saludo, Fernando.

Por fernolo

23 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 May 2010 12:56 pm
Oh Tribak!

Bueno el código en realidad funcionó bien para avanzar y retroceder o sea botonalante y abotonatras pero una vez que uso el código, el botón para dar play solo camina un frame y el botón para pausar no obedece.

Me gustaría si puedes pruebes un ejemplo sencillo con tu código de avanzar y en ese mismop ejemplo pon un botón para pausar y otro para play. Si ya se resuelve creo que sería un bonito aparte ya que no lo he visto tan sencillo en el foro y es muy útil para controlar por ejemplo un pequeño video en la línea del tiempo.

Por favor un último esfuerzo y cerramos el tema.

Gracias de nuevo!

Por fernolo

23 de clabLevel



 

msie8
Citar            
MensajeEscrito el 14 May 2010 04:00 pm

Código ActionScript :

play_btn.onRelease=function(){
    _root.play(); //_root. , _parent o contenedor 
}
stop_btn.onRelease=function(){
    _root.stop();//_root. , _parent o contenedor 
}

Por Freeki

Claber

183 de clabLevel



Genero:Masculino  

Desarrollador Web Uy

firefox
Citar            
MensajeEscrito el 17 May 2010 02:00 pm
Muchas gracias por la respuesta y la ayuda de todos los que antes colaboraron también. Esto es lo mejor que me ha pasado hoy.

Resumiendo, ahora todo quedaría así:
Para navegar por la línea del tiempo hacer 4 botones, como los de un video:
botonplay
botonpausa
botonalante (ir rápido ahacia alante -ff-)
botonatras (ir rápido hacia atrás -rew-)

Entonces el código quedaría así:

Código ActionScript :

botonplay.onRelease=function(){
_root.play(); //_root. , _parent o contenedor
} 
//
botonpausa.onRelease=function(){
_root.stop();//_root. , _parent o contenedor  
}
//
stop();
botonalante.onPress = function(){
onEnterFrame = function (){
if (_currentframe<_totalframes){
gotoAndStop(_currentframe+10);
} else {
gotoAndStop(1);
}
};
};
botonalante.onRelease = function(){
delete onEnterFrame;
_root.play(); //esto se lo agregué para que cuando soltara el mouse siguiera corriendo...
};
//
stop();
botonatras.onPress = function(){
onEnterFrame = function (){
if (_currentframe<_totalframes){
gotoAndStop(_currentframe-10);
} else {
gotoAndStop(1);
}
};
};
botonatras.onRelease = function() {
delete onEnterFrame;
_root.play(); //esto se lo agregué para que cuando soltara el mouse siguiera corriendo...
};

Por fernolo

23 de clabLevel



 

msie8
Citar            
MensajeEscrito el 18 May 2010 04:25 pm
claro! quedó bárbaro :wink:

tambien estaría bueno que _root, _parent o contenedor se lo pusieras a todas las acciones porque están en el mismo lugar (_root), después si queres poner los botones en un mc.. es poner Ctrl + F buscas todos los _root en el caso de haber puestro _root y lo remplazas, así de facil.. esto es muy práctico para cuando tenes muchas lineas de código y perderías mucho tiempo buscando linea por linea.

tambien le podrias agregar una barra de reproduccion que es muy facil:

coloca dos clips en el escenario: barra y barra_area, ahora junto con el otro código pegas este...

Código ActionScript :

//escalo barra según porcentaje de reproducción:
barra.onEnterFrame = function() {
   var porcent:Number = (_root._currentframe * 100) / _root._totalframes;
   this._xscale = porcent;
};

//genero la posición al hacer click en barra_area:
var rango:Number = barra_area._x + barra_area._width;

barra_area.onRelease = function() {
   var position:Number = Math.floor(((barra_area._x + barra_area._xmouse) * 100) / rango);
   position = (position * _root._totalframes) / 100;
   _root.gotoAndPlay(position);
};


espero que te sirva, saludos :wink:

Por Freeki

Claber

183 de clabLevel



Genero:Masculino  

Desarrollador Web Uy

firefox
Citar            
MensajeEscrito el 18 May 2010 04:34 pm
y en vez de poner dos clips (play y pausa)
podrias crear uno donde en el primer frame le pones un stop y la imagen de play, el otro otro stop y la imagen de pausa, se entiende?

y el código seria algo asi:

Código ActionScript :


//con esta variable detectamos si se esta reproduciendo o no,
//yo pongo false para que no comienze solo

var reproduciendo:Boolean = false;

play_on_btn.onRelease = function() {
   this.play();//muevo un frame el clip play_on_btn
   
   //si se esta reproduciendo
   if (reproduciendo) {
      _root.stop();// lo paro
      reproduciendo = false;
   } else {//sino
      _root.play();// continuo la reproduccion
      reproduciendo = true;
   }
};

Por Freeki

Claber

183 de clabLevel



Genero:Masculino  

Desarrollador Web Uy

firefox
Citar            
MensajeEscrito el 18 May 2010 09:08 pm
Hola, gracias otra vez, esto está quedando muy bien. Es perfecto eso de la tecla PLAY / PAUSE y también la barrita de navegación y para ser más ambicioso desearía que también fuera arrastrable de forma que se pueda mover la pelicula por la misma barra.
Ahora sólo hay un problema que me gustaría me ayudasen a resolver: Todo funciona bien pero si llego al final de la línea del tiempo presionando el "botonalante" sucede que al soltarlo me va al principio de la línea de tiempo, o sea no se queda en el final como debiera ser. Es como si se rebobinara el video.
Yo tengo dificultades con subir ficheros, si alguien puede por favor, armen el ejemplito con algunos frames y pongan los botones, incluso con el aporte de la barra y el play-pausa intercambiable. Ya de paso comprobamos si se resuleve lo que les digo del final del video. Les confieso que he tratado de arreglarlo y lo que hago con las manos lo desarmo con los pies .

De verdad pienso que es el momento para subir un ejemplito y darle vida a este aporte que me parece utilísimo.
Un saludo y muchas gracias a todos, Fernando.

Por fernolo

23 de clabLevel



 

msie8
Citar            
MensajeEscrito el 18 May 2010 09:41 pm
ese problema está acá..

Código ActionScript :

botonalante.onPress = function() {
   onEnterFrame = function () {
      //acá le decis que si currenFrame es menor a totalFrames (osea el ultimo frame)
      //avance sino que valla al fotograma 1
      if (_currentframe < _totalframes) {
         gotoAndStop(_currentframe + 10);
      } else {
         gotoAndStop(1);//aca deberias sacar esto
      }
   };
};


lo del drag te lo dejo a vos porque es muy sencillo y la idea es ayudarte a aprender, tenés que usar la misma lógica que usé para detectar la posición al presionar barra_area pero con un mc arrastrable = startDrag() y stopDrag().

Por Freeki

Claber

183 de clabLevel



Genero:Masculino  

Desarrollador Web Uy

firefox
Citar            
MensajeEscrito el 18 May 2010 09:46 pm
y cambia lo del play() en el release, ya que si está en el ultimo frame no tendria que tener play() sino stop() para que no te loopee, se entiende?

yo lo pondría así..

Código ActionScript :

botonalante.onRelease = function() {
   delete this.onEnterFrame;
   if (_currentframe < _totalframes) {
      _root.play();//esto se lo agregué para que cuando soltara el mouse siguiera corriendo... 
   } else {
      _root.stop();
   }
};


fijate que cambié el onEnterFrame por this.onEnterFrame en los dos casos, pero es por un tema de costumbre, pq
no me gusta que hallan cosas sueltas por ahi que después te pueden entreverar :wink:

Por Freeki

Claber

183 de clabLevel



Genero:Masculino  

Desarrollador Web Uy

firefox
Citar            
MensajeEscrito el 19 May 2010 08:17 pm
Debido a que hasta ahora funcionan algunos botones por separado pero cuando se juntan se interfieren he puesto un nuevo tema "Please ayuda para completar esto que CASI está listo" donde puse una dirección rapidshare donde está el ejemplo flash preparado donde sólo hay que ponerle el código en el layer del AS, de este modo cualquier ayuda que me puedan dar la podemos probar y en caso de que ya sirva que vaya para la sección de ejemplos de este foro.

Muchísimas gracias a todos y espero que ya se pueda concluir este tema.

Les pongo el link del ejemplito corriendo en .SWF:

http://rapidshare.com/files/389291658/navegador.swf.html

y si se embullan a mejorarlo ya saben donde está el fuente posteado, así le insertan el poder que le falta a los botones FF y Rewind.

Gracias una vez más!

Por fernolo

23 de clabLevel



 

msie8
Citar            
MensajeEscrito el 19 May 2010 08:45 pm
ya lo ví y vi tu mensaje.. si queres mandamelo al mail y lo vicho

Por Freeki

Claber

183 de clabLevel



Genero:Masculino  

Desarrollador Web Uy

firefox
Citar            
MensajeEscrito el 25 May 2010 12:45 pm
Estuve mirando el código y arreglé algunas cositas y al final trabajó todo OK, de modo que debe quedar así:

Código ActionScript :

//Para todos los frames menos el útimo:
stop(); // Esto es para que cuando empiece la película esté detenida a no ser que accionemos los botones.
//
botonplay.onRelease=function(){
_root.play(); //
} 
//
botonpausa.onRelease=function(){
_root.stop();//
}
//
//
botonalante.onPress = function(){
onEnterFrame = function (){
if (_currentframe<_totalframes-10){
gotoAndPlay(_currentframe+10); // El 10 es para que salte cuadros de 10 en 10 eso da la sensación de ir más rápido
} else {
gotoAndStop(_totalframes)
}
};
};
botonalante.onRelease = function(){
delete onEnterFrame;
if (_currentframe>=_totalframes-10){
   _root.stop();//
   } else {
_root.play();//
};
};
//
stop();
botonatras.onPress = function(){
onEnterFrame = function (){
if (_currentframe<_totalframes){
gotoAndStop(_currentframe-10);
} else {
gotoAndStop(1);
}
};
};
botonatras.onRelease = function() {
delete onEnterFrame;
_root.play();//
};
//
//Para el último frame, o sea colocar esto en el último frame solamente que es keyframe:
stop();
botonatras.onPress = function(){
onEnterFrame = function (){
if (_currentframe<=_totalframes){
gotoAndStop(_currentframe-10);
} else {
gotoAndStop(1);
}
};
};
botonatras.onRelease = function() {
delete onEnterFrame;
_root.play();
};


Bueno al fin hemos llegado al final, debe haber sus cositas por mejorar pero tal como está me funciona bien.
Gracias a todos los que hicieron posible este resultado.

Por fernolo

23 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 May 2010 03:23 pm
en el else agregale un delete onEnterFrame

Código ActionScript :

...
} else { 
gotoAndStop(_totalframes) ;
delete onEnterFrame;
------------------------------
} else { 
gotoAndStop(1); 
delete onEnterFrame;

Si terminaste de recorrer el timeline, quita el evento ya que no tiene caso seguir llamándolo

Por nasho

Claber

908 de clabLevel

1 tutorial

Genero:Masculino  

Web Developer

firefox
Citar            
MensajeEscrito el 26 May 2010 01:19 pm
Claro, o sea siempre que haya un stop, es decir no hay movimiento o cambio de frame, no hay enterframe y por tanto no es lógico invocar tal evento. Gracias muy buena tu aclaración.

Por fernolo

23 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 May 2010 05:06 pm
fernolo, onEnterFrame siempre se ejecuta, ya sea que haya cambio de frame o no, la idea de borrarlo es para que no consumas recursos innecesariamente.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

chrome
Citar            
MensajeEscrito el 26 May 2010 08:56 pm
Fricky si es como dices que no depende de que sea un stop o sea que se acaben los cambios de frame, la idea es borrarlo siempre que no haga falta. Por lo que me puso Nacho, inferí que era con los stops. Me gustaría que le dieran un último repasón al código para ver donde hay que ponerlo que no esté. Así nos queda limpio de problkemas el código.
Gracias!

Por fernolo

23 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2010 03:08 am
Lo siento, hermano, pero eso te toca a ti. Míralo, pruébalo y si tienes problemas que no puedas resolver por ti mismo, pregunta sin problemas, pero es tu trabajo mirar el código.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

chrome
Citar            
MensajeEscrito el 27 May 2010 10:23 pm
Es lo que dice The Frichy! (:O ya tienes signo de admiración jeje)

Usas el evento para recorrer tu línea, cuando llega al final ya no es necesario seguir llamando a ese evento puesto que no va a saltar a otro frame, pero si no lo quitas se va a seguir llamandolo lo cual te consume recursos que ya no estas utilizando.

Es como el pacman, avanza hasta que llega a un obtaculo que le impida el paso, da la apariencia que se detuvo pero no es así sigue tratando de avanzar, en tu caso para que quieres que siga avanzando si ya no puede?

Por nasho

Claber

908 de clabLevel

1 tutorial

Genero:Masculino  

Web Developer

firefox
Citar            
MensajeEscrito el 30 May 2010 12:13 am
Gracias a todos, entendí bien,
Con relación Fricky a que "eso me toca a mí..." o sea mirar el código: Claro que he mirado el código sólo que en este caso el código no da problemas, yo no tengo como darme cuenta si está todo lo eficiente que debe estar porque funciona bien. Con el delete enterframe debe funcionar mejor pero eso no se nota tan fácilmente. Por eso es que les pedí que le dieran un vistazo al código, pero no para que me hagan mi trabajo, para yo descansar de programar, sino sólo para que otros que empiezan como yo puedan contar con un código bien hecho y validado por gente que sabe más que yo.

En fin les agradezco haberme ayudado y seguiré trabajando por aprender.

Un saludo,

Fernando.

Por fernolo

23 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.