Foros del Web » Creando para Internet » Flash y Actionscript »

Movimiento de objeto

Estas en el tema de Movimiento de objeto en el foro de Flash y Actionscript en Foros del Web. Resulta que hice lo siguiente. Al presionar el boton "arriba", el objeto se irá para arriba pero quiero que después que este halla subido hasta ...
  #1 (permalink)  
Antiguo 05/12/2008, 17:51
 
Fecha de Ingreso: febrero-2008
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 0
Movimiento de objeto

Resulta que hice lo siguiente. Al presionar el boton "arriba", el objeto se irá para arriba pero quiero que después que este halla subido hasta la posición indicada, este baje y llegue a la posición de donde partió. Intente creando una variable auxiliar pero no hace nada si lo hago.

Este es el código de esa parte:

Código:
speed = 63;

onEnterFrame = function()
{

if(Key.isDown(Key.UP)& pelota._y>280)
{
	pelota._y = pelota._y - speed;
}
  #2 (permalink)  
Antiguo 05/12/2008, 20:16
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 14 años
Puntos: 5
Respuesta: Movimiento de objeto

Hola,

Es un problema de lógica.

Creo que tienes unos cuantos errores.. En qué posición empieza tu clip, es que pones como condición (>280). En este caso si no has cambiado nada, la pelota al inicio debería de subir de una posición mayor a 280 y con una speed negativa.

Por otra parte el and de flash es &&, el que tu has puesto es sólo para modo bit.

posible solución

Código PHP:
initPos=pelota._y;
speed=-63;

onEnterFrame = function()
{
    if(
pelota._y<20 || pelota._y>initPos)
    {
        
speed=-speed;
    }
    if(
Key.isDown(Key.UP))
    {
        
pelota._y += speed;
    }

No sé como lo tienes montado pero ahí queda un ejemplo muy sencillo.

Salu2 ;)
__________________
[+]
[+]

Última edición por yoseman; 05/12/2008 a las 20:21
  #3 (permalink)  
Antiguo 05/12/2008, 22:31
 
Fecha de Ingreso: febrero-2008
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Movimiento de objeto

Es que la posición inicial del objeto es 315 para el eje y.

Entonces quiero que suba sólo un poco, al presionar una vez el botón hacia arriba que llegue hasta cierta posición y que al apretarlo otra vez no siga subiendo.
Eso de subir me funciona bien. Lo único que no puedo hacer es que después de hacerlo subir, que este caiga y vuelva a la posición 315. O si presiono hacia adelante junto con el de arriba que caiga en la posición 315, pero obviamente que aumente x.

De todas formas probaré el código que me diste.

Gracias !
  #4 (permalink)  
Antiguo 05/12/2008, 22:41
 
Fecha de Ingreso: febrero-2008
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Movimiento de objeto

Lo probé... pero no era eso exactamente. Es que sube y se mueve demasiado rápido, y sobre la altura, era demasiada así que hice que llegue hasta cierta posición. Al presionar el botón "arriba", este si vuelve a su anterior posición, tal como yo quería. Pero al presionarlo una segunda vez este baja de la posición inicial y después se pierde al bajar demasiado. Quizá el incrementar perjudicó eso.
  #5 (permalink)  
Antiguo 05/12/2008, 23:37
 
Fecha de Ingreso: febrero-2008
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Movimiento de objeto

Consegui hacer todo lo que quería. Aunque hay un pequeño detalle. El objeto cae solo despues de presionar el boton "arriba". Lo que pasa es que cuando mantengo el boton presionado, el objeto se queda arriba, y no baja hasta que suelte el botón. Que podría hacer en ese caso?
Este es el código:

Código:
speed = 43;
speed1= 20;

onEnterFrame = function()
{
	if(pelota._y < 315)
	{
		pelota._y = 339;
	}

if(Key.isDown(Key.UP)&& pelota._y>280)
{
	pelota._y = pelota._y - speed;
	
	
}
    
if(Key.isDown(Key.RIGHT)&& pelota._x>-51 & 
		pelota._x<508)
{
	pelota._x = pelota._x + speed1;
}
if(Key.isDown(Key.LEFT)&& pelota._x>35)
{
	pelota._x = pelota._x - speed1;
}
	
}
  #6 (permalink)  
Antiguo 06/12/2008, 05:07
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 14 años
Puntos: 5
Respuesta: Movimiento de objeto

Cita:
Iniciado por Lain0x Ver Mensaje
Lo probé... pero no era eso exactamente. Es que sube y se mueve demasiado rápido, y sobre la altura, era demasiada así que hice que llegue hasta cierta posición. Al presionar el botón "arriba", este si vuelve a su anterior posición, tal como yo quería. Pero al presionarlo una segunda vez este baja de la posición inicial y después se pierde al bajar demasiado. Quizá el incrementar perjudicó eso.

Perdona, pero lo acabo de probar y no sé pierde el clip para nada. Además es que no sé puede perder porque el código no lo permite.

Que se mueva demasiado rápido tampoco lo entiendo, ya que eres tu el que ha definido un incremente de 63 e igual de rápido irá con un speed de 63.

Al bajar se 'pierde' hasta la posición inicial del clip que recoge al principio tal y como tu dijiste.

Es mejor que expliques con detalle, lo que quieres que haga la pelota, porque además hay otras formas mejores de hacer estas animaciones(incluso con easing), pero para aconsejarte tienes que decir exactamente que limites de coordenadas tanto verticales como horizontales necesitas. en fin simplemente contar un poco mejor los limites la posición inicial , lo que quieres etc.

Si me explicas mejor, yo te aconsejo en un momento.



Salu2 ;)
__________________
[+]
[+]

Última edición por yoseman; 06/12/2008 a las 05:30
  #7 (permalink)  
Antiguo 06/12/2008, 11:07
 
Fecha de Ingreso: febrero-2008
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Movimiento de objeto

Ok.

El punto de inicio del objeto es X = 0.0 e Y = 315.0.
Quiero que al presionar el botón "arriba", el objeto llegue a la posición 227 en Y.
Pero lo que necesito principalmente es que después que este suba, baje automáticamente a la posición 315 en Y.
Ahora el pequeño detalle que tiene, es que si yo mantengo presionado el botón "arriba", el objeto se mantiene en la posición 227 en Y. Es decir que el objeto bajará solo cuando yo suelte el botón "arriba". Y me gustaría que aunque lo mantenga apretado, este caiga a la posición 315 igual.
  #8 (permalink)  
Antiguo 06/12/2008, 16:38
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 14 años
Puntos: 5
Respuesta: Movimiento de objeto

ey hola,

Te paso dos ejemplos uno normal y uno con aceleración aunque ya te toca a tí optimizarlos supongo:

Código PHP:
init_x=100;
init_y=315;
max_y=227;
pelota._x=init_x;
pelota._y=init_y;

speed=-20

onEnterFrame = function() 
{     
    if(
Key.isDown(Key.UP) || speed>0
    {     
        if(
pelota._y<max_y || pelota._y>init_y
        { 
            
speed=-speed
        } 
        
pelota._y += speed
    } 

Código PHP:
init_x=100;
init_y=315;
max_y=227;
pelota._x=init_x;
pelota._y=init_y;
targety=init_y;
speed=-20

easing(pelota);
draw
function easing(m:MovieClip
{

    
m.onLoad = function() 
    {
        
        
this._x=init_x;
        
this._y=init_y;

    };
    
m.onEnterFrame = function() 
    {    
        if(
this._y<max_y)
        {
            
speed=-speed;
        }
        if(
Key.isDown(Key.UP)) 
        {    
            if(
speed<0)
            {
                
targety+=speed;
            }
        } 
        if(
speed>0)
        {
            
targety=init_y;            
            if(
this._y==targety)
                
speed=-speed;
        }
        
this._y += Math.ceil((targety-this._y)/2);
    };

Cualquier cosilla que surja encantado de ayudar.

Salu2 ;)
__________________
[+]
[+]
  #9 (permalink)  
Antiguo 06/12/2008, 16:54
 
Fecha de Ingreso: febrero-2008
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Movimiento de objeto

Gracias... pero aún hay un pequeño detalle.

Básicamente los dos códigos hacen lo mismo... osea la pelota llega hasta cierta posición y cae, justo lo que yo quería que hiciera, salvo algunos detalles de posiciones que yo puedo arreglar.

El problema es que si mantengo pulsado el botón "arriba", la pelota sube, cae, sube, cae, sube, cae y sigue así sin detenerse.

Ahora, si yo presiono el botón "arriba" sin mantenerlo presionado, resulta perfecto. (Sube, baja y se detiene).

Pero si lo mantengo pulsado, hace lo mismo sin parar. Me gustaría que pulsado y soltado, y pulsado y mantenido, el objeto haga lo mismo.
  #10 (permalink)  
Antiguo 06/12/2008, 17:16
 
Fecha de Ingreso: febrero-2008
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Movimiento de objeto

Espera, no, me parece que está bien eso del ciclo, osea que lo haga indefinidamente mientras se tiene pulsado el botón, tal como cualquier personaje de videojuegos. Es que se ve extraño por la velocidad que tiene.
Sólo me queda resolver el problema de la posición cuando cae, ya que cae más abajo de lo que debería.
Aps y también hay que pulsarlo dos veces para que este suba a la posición y vuelva.


Lo edito porque ya solucioné la mayoría de las cosas... aquí esta el código:

Código:
init_x=26; 
init_y=300; 
max_y=310; 
pelota._x=init_x; 
pelota._y=init_y + 40; 

speed=-30;  

onEnterFrame = function()  
{      
    if(Key.isDown(Key.UP) || speed>0)  
    {      
        if(pelota._y<max_y || pelota._y>init_y)  
        {  
            speed=-speed;
			
        } pelota._y = pelota._y - speed; 
        
		} 
		
}
Lo que hace es que al pulsar el botón "arriba" subira y volverá como dije antes... pero ahora sube muy poco. Lo que si es que vuelve exactamente a la posición deseada, sólo el problema es que no llega muy alto.

Última edición por Lain0x; 06/12/2008 a las 17:33
  #11 (permalink)  
Antiguo 06/12/2008, 17:59
 
Fecha de Ingreso: febrero-2008
Mensajes: 78
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Movimiento de objeto

Y con el segundo código... tengo que presionar dos veces el botón para que la pelota llegue a arriba, también anda muy cerca:

[CODEinit_x=26;
init_y=338;
max_y=260;
pelota._x=init_x;
pelota._y=init_y;
targety=init_y;
speed=-50;

easing(pelota);
draw
function easing(m:MovieClip)
{

m.onLoad = function()
{

this._x=init_x;
this._y=init_y;

};
m.onEnterFrame = function()
{
if(this._y<max_y)
{
speed=-speed;
}
if(Key.isDown(Key.UP))
{
if(speed<0)
{
targety+=speed;
}
}
if(speed>0)
{
targety=init_y;
if(this._y==targety)
speed=-speed;
}
this._y += Math.ceil((targety-this._y)/2);
};
} ][/CODE]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:54.