Comunidad de diseño web y desarrollo en internet online

Lanzamiento y gravedad AS3

Citar            
MensajeEscrito el 13 Abr 2011 02:41 pm
Tengo una consulta a ver si alguien puede ayudarme. Tengo un objeto que tengo que lanzarlo con un efecto resortera.

Hasta ahora tengo armado el codigo de que al agarrar y estirar el objeto al soltarlo avanza.

Tengo esto dentro de un evento de enter frame: (esto usando drag and drop)

Código ActionScript :

xUno = xDragUno - xPosUno;
yUno = yDragUno - yPosUno;
               
forceUnoX = xUno / 10 * - 1;
forceUnoY = yUno / 10 * - 1;
               
shoeUno.x += forceUnoX;
shoeUno.y += forceUnoY;


xUno e yUno son variables para guardar el resultado de la resta.

xDragUno e yDragUno son las posiciones del objeto al moverlo con el mouse antes de ser lanzado.

xPosUno e yPosUno son la posicion inicial del objeto.

Necesito que este objeto rebote eficazmente en los bordes del escenario, y agregarle gravedad para que al lanzarla empieze a bajar hasta llegar al piso con un rebote muy sutil, alguno me da una mano?

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 13 Abr 2011 07:59 pm
Quizás si partes de los ejemplos de una pelota rebotando (hay cientos de ejemplos de eso) sea un mejor punto de arranque que una formula de easing

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Abr 2011 04:55 pm
Revisando tus ultimos posts he visto que has estado trabajando en el mismo problema desde hace mas de un mes.
Lo mejor es aprender a usar alguna libreria de fisica, con eso lograrias hacer lo que quieres y creo que lo lograrias en menos de un mes...
Te aconsejo estudiar Box2D.

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 14 Abr 2011 05:22 pm
Nota: hay un port de Box2D directamente de C++ usando Alchemy, arranca mejor con el port directamente a AS3

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Abr 2011 06:18 pm
Si, estoy hace rato con esto. Pasa que este proyecto estaba en as2 y tenia que hacerlo asi, ahora aprobaron el cambio para as3 y tengo que pasar todo y hacer esto en as3, aunque da un poco de problemas.

Tengo todo armado ya menos la gravedad. Al lanzar este objeto sea izquierda o derecha avanza y rebota en las esquinas, tambien tiene efecto resortera y si se excede del limite maximo de lanzamiento vuelve a su posicion con un bounce.

Pero al agregar la gravedad para que baje aparecen los problemas, porque para lograr eso deberia meter un enter frame con algun listener, pero el movimiento del objeto ya tiene uno y al poner 2 no funciona muy bien.

Usar la libreria de fisica Box2D no creo que me ayude, yo tengo que simular este tipo de cosas que es lo que ya tengo armado menos la gravedad. Aparte como estoy aprendiendo me parece un mejor reto hacerlo a mano =).

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 14 Abr 2011 06:27 pm
Si es por reto, entonces lo que tienes que hacer es una composición de fuerzas sobre el objeto, así la gravedad es un valor arbitrario que suma sobre el eje y constantemente, lo usual es que sea un valor entre 0 y 1 ... sorry por no escribirte código, pero es que soy un poco vago. Considera además que un juego tiene en general un solo tick (enterframe si prefieres) que maneja todo, si tienes mas de uno seguramente hay un problema de diseño

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Abr 2011 06:51 pm
Estoy haciendo eso pero no funciona. Tengo 1 solo enter frame, y una funcion aparte llamada gravityTest.

Tiene :
velocity += gravity;
shoeUno.y += gravity;
--------
Estas son las variables:
var Velocity = 0
var gravity = 3

Llamo a la funcion gravityTest cuando "lanzo" el objeto, pero hace el movimiento normal sin tomarme en cuenta la gravedad.

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 14 Abr 2011 07:18 pm
Si te mueves en mas de un eje, la velocidad es un vector, no un valor absoluto ... o por lo menos dos velocidades, una en cada eje. La gravedad afecta a la velocidad del eje y, porque en realidad la velocidad es un vector

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2011 09:18 am

Código ActionScript :

velocity += gravity;
shoeUno.y += gravity;

?
creo que fuese mejor:

Código ActionScript :

velocity += gravity;
shoeUno.y += velocity;

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 15 Abr 2011 02:19 pm
Si me habia confundido cunado lo arme, pero tampoco me funciona asi.

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 15 Abr 2011 02:42 pm
No me funciona no es una respuesta seria si realmente quieres aprender.
Receta: media pila y tutoriales

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2011 07:22 pm
No hay tutoriales de lo que quiero hacer, si no no estaria preguntando aca.

Al responderme como seria mejor usar el codigo, y despues de aclarar que cuando lo postie habia puesto mal el codigo en el flash develop, una respuesta razonable es decir que no me funciona con esa metodologia, por lo que me gustaria escuchar alguna solucion posible, no una mala onda con la que me respondiste.

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 15 Abr 2011 07:55 pm
No hay tutoriales de lo que quiero hacer


Mira lo que encontré: http://www.gotoandplay.it/_articles/2007/02/game_tutorial_part1.php

Recuerda: NUNCA hay un tutorial para exactamente lo que queremos hacer, hay tutoriales que enseñan principios que tendremos que aplicar para poder hacer lo que queremos

Y no soy mala onda, soy terriblemente mala onda.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Abr 2011 08:45 pm
Gracias Jorge, pero con el ingle sno me llevo bien no entiendo muchos los comentarios, el codigo si, pero es as2. Vi varios tutoriales de ese tipo, pero no me ayudaron a armar lo que quiero, esta bastante complicado el tema.

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 15 Abr 2011 08:56 pm
Manejar la física en los juegos es difícil, pero en ciertos tipos de juegos es la base. Además hacer juegos es de por si difícil, y quien lo intente sin buena base se encontrará con problemas en cascada, lo se por experiencia

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Abr 2011 02:26 pm
No es para un juego, es una boludes que tengo que meter en un site.

No importa esto, queria hacer una nueva consulta. Como puedo crear una linea que se agrande y achique?, me explico mejor. Un lado de esta linea tiene que estar fijo en un punto, y el otro iria por detras de un objeto, y al hacerle un drag deberia acompañar al objeto estirandose por asi decir, tienen algun ejemplo, tutorial, o algo similar a lo que busco? gracias.

Por Skuash

40 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina.

firefox
Citar            
MensajeEscrito el 19 Abr 2011 10:16 am
Shuaks, tampoco es mucho de física o de juegos. Veamos los eventos implicados
1.-Un mouseDown para empezar el drag
2.-Un MouseUp para empezar el movimiento
3.-Un EnterFrame que controle el movimiento
Tu error es que es el el MouseUp donde debes calcular la "velocidad inicial" (vamos, los forceUnoX y forceUnoY) y NO en el EnterFrame.
Para ello recuerda que tienes que definir las variables forceUnoX y forceUnoY FUERA de cualquier función -si no no tendrían valor dentro fuera de donde las hayas definido-.

Con eso, en el EnterFrame sólo tendrías

Código ActionScript :

shoeUno.x += forceUnoX; 
shoeUno.y += forceUnoY;

Si le quieers añadir gravedad, en el EnterFrame simplemente

Código ActionScript :

forceUnoY = yUno / 10 * - 1; 
shoeUno.x += forceUnoX; 
shoeUno.y += forceUnoY;
forceUnoY+=.5 //<--o lo que quieras aumentarle a la velocidad en Y


NOTA:Dejo a tu elección el remover el Listener del Enterframe en el MosueDown (y crearlo en el MouseUp)
NOTA2:He puesto que la velocidad de Y, en cada paso aumenta .5. (puedes hacerlo que sea .2, ó .8 ó 3)

Por Eliseo2

710 de clabLevel



 

firefox

 

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