Comunidad de diseño web y desarrollo en internet online

¿¡Como logro este Efecto De rebote!?

Citar            
MensajeEscrito el 22 Jul 2007 01:59 am
Hola, me pregunto. Si alguien me puede ayudar.
No logro imitar el Efecto de rebote dado Aqui !! (Si fuera en AS3 mejor, pero en As2 me da igual)
http://www.minijuegos.com/juegos/jugar.php?id=4747
Este


Mejor aun si me esplican como hacen el Efecto de Salto :P de los Personajes...

Ojala me puedan ayudar... Gracias..
Adios! :D

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

msie
Citar            
MensajeEscrito el 23 Jul 2007 03:25 pm
¿? :D :D

PORFAVOR ^^

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

msie
Citar            
MensajeEscrito el 23 Jul 2007 03:44 pm
En realidad, es sencillo, simplemente almacenás el ángulo en el que se mueve la pelota y usás algo de trigonometría para moverla. En los rebotes, podés variar el ángulo de forma tal que el ángulo de rebote sea igual al ángulo de incidencia. Por supuesto es más fácil hacerlo con círculos. Por eso las cabezas redondas de los personajes.

Hay varios tutoriales para hacer eso en la web.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 23 Jul 2007 05:44 pm
^^ No entendi tu esplicasion..
Me podras dar Links?

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

msie
Citar            
MensajeEscrito el 23 Jul 2007 08:48 pm

Como dije, con círculos es más fácil, ya que los puntos exteriores se hallan equidistantes al centro. Para objetos más complejos, los algoritmos se complican.

(la imagen es de wikipedia)

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 23 Jul 2007 10:14 pm
Hola, olle... es que no soy matematico ni nada..(Tengo 15 años -.-!)
Como aplico esto..que... calculos necesito...?
Me darias una pequeña esplicasion simple y rapida...
Se te agradece mucho por las ayudas en todo caso :D

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

msie
Citar            
MensajeEscrito el 24 Jul 2007 03:33 pm
A ver, primero que nada quiero dejar en claro que no soy matemático ni físico (ni programador). Tengo 18 años, por lo que puedo asegurar que si yo lo pude hacer, cualquiera es capaz de hacerlo.

Los cálculos son muy simples. En primer lugar, si yo tengo una línea de 3 metros de alto con un ángulo de 30 grados respecto a la horizontal, calculo su largo en el eje x y en el y usando trigonometría:

Para el eje x: l * cos 30º = 2,598.. m
Para el eje y: l * sen 30º = 1,5 m

(donde l es el largo inicial de 3 metros)

Por lo tanto, si aplicamos esto al movimiento tenemos que si queremos mover algo 10 px por fotograma en un ángulo cualquiera, aplicamos éste código (recordá que los ángulos deben estar en radianes!):

Código :

var vel = 10;
var ang = Math.PI * Math.random ();
this.onEnterFrame = function () {
this._x += vel * Math.cos (ang);
this._y -= vel * Math.sin (ang);
};
Además, en el eje y restamos porque el sistema de referencia con el que trabajamos está invertido en este eje (el cero está arriba).

Una vez que quedó eso claro, pasamos al siguiente punto, la detección de colisiones.

Como dije, todo es más fácil con círculos, ya que hay colisión si la distancia entre sus centros es menor (o igual) a la suma de sus radios. Esto debería ser muy obvio, por lo que no voy a insistir. En todo caso, te dejo el código para calcular la distancia:

Código :

distancia = function (mc1:Object, mc2:Object):Number {
var dx, dy;
dx = mc1._x - mc2._x;
dy = mc1._y - mc2._y;
return Math.sqrt (dx * dx + dy * dy);
};

Ahora, la reacción a la colisión, lo que podés hacer (te lo dejo a vos porque no es nada difícil), es analizar el dibujo.

En caso de que te preguntes porqué no te doy el código ya hecho es simple, creo que la mejor manera de aprender es siendo un poco autodidacta.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 24 Jul 2007 03:59 pm
:o
Muchas Gracias...
Analizare el codigo .... :P
Ai cosas que entendi.. Si... pero ... -.-!
Que es que..creo que primero tengo aprender un poco de trigo....no...me...tria...(O como sea)
Por que muchos terminos me son Totalmente desconocidos....
Muchas gracias en todo caso.
(Por sierto si soy bastante autodidacta...Todo lo que se, lo he aprendido solo, con ayuda de..Algunos libros que he comprado y tutos.. de internet :P Gracias a gente como tu que ayuda...)

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

msie
Citar            
MensajeEscrito el 24 Jul 2007 06:53 pm
Si algún término te parece desconocido, preguntá qué significa, no te quedes con la duda.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 25 Jul 2007 01:35 am

HernanRivas escribió:



Para el eje x: l * cos 30º = 2,598.. m
Para el eje y: l * sen 30º = 1,5 m

(donde l es el largo inicial de 3 metros)

Por lo tanto, si aplicamos esto al movimiento tenemos que si queremos mover algo 10 px por fotograma en un ángulo cualquiera, aplicamos éste código (recordá que los ángulos deben estar en radianes!):

Código :

var vel = 10;
var ang = Math.PI * Math.random ();
this.onEnterFrame = function () {
this._x += vel * Math.cos (ang);
this._y -= vel * Math.sin (ang);
};
Además, en el eje y restamos porque el sistema de referencia con el que trabajamos está invertido en este eje (el cero está arriba).

Una vez que quedó eso claro, pasamos al siguiente punto, la detección de colisiones.

Como dije, todo es más fácil con círculos, ya que hay colisión si la distancia entre sus centros es menor (o igual) a la suma de sus radios. Esto debería ser muy obvio, por lo que no voy a insistir. En todo caso, te dejo el código para calcular la distancia:

Código :

distancia = function (mc1:Object, mc2:Object):Number {
var dx, dy;
dx = mc1._x - mc2._x;
dy = mc1._y - mc2._y;
return Math.sqrt (dx * dx + dy * dy);
};

Ahora, la reacción a la colisión, lo que podés hacer (te lo dejo a vos porque no es nada difícil), es analizar el dibujo.

En caso de que te preguntes porqué no te doy el código ya hecho es simple, creo que la mejor manera de aprender es siendo un poco autodidacta.

Ya que insiiiisteee :)
Ok hay se ven mis dudas...
El radio.... .¿Se puede sacar asi:
mc1._xscale/2 ???
Ok..
Ojala me puedas ayudar! De verda te agradesco muchoo ^^

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 25 Jul 2007 02:49 am
Ok:

cos: abreviatura de coseno, una relación numérica entre lados de un triángulo.
sin o sen: seno, otra relación numérica.

Tarde o temprano las vas a ver en el colegio, pero con saber aplicarlas alcanza.

radianes: supongo que estarás habituado a dividir una circunferencia en 360 grados. Bien, hay otra manera de hacerlo que es en 6,2830... (2π) radianes. Es un ángulo. Sin un dibujo es muy difícil explicarlo, por lo que recurro nuevamente a wikipedia (ver imagen). En ese dibujo se observa que cuando la longitud del arco (un pedazo del perímetro) es igual al radio, se forma un ángulo de 1 radián.

Los ángulos más comunes en radianes son (como no hay tablas, tengo que usar colores, espero se entienda):

Grados 30° 45° 60° 90° 180° 270° 360°
Radianes 0 π/6 π/4 π/3 π/2 π 3π/2

Flash trabaja sólo con radianes para sus funciones matemáticas (en las rotaciones trabaja con grados :roll: ), por lo que vos también deberías hacerlo.

eje: cuando trabajamos en 2 dimensiones, tenemos 2 ejes, el x y el y. No sé de que otra manera decirlo, dejo una imagen de ejemplo (reemplazá axis por eje y origin por origen), cortesía de Wikipedia. Con respecto a que está invertido, me refería a que lo más común en matemática es tener el cero de las x a la izquierda y el 0 de las y abajo. En Flash el eje y está invertido (con su 0 arriba).

Creo que eso es todo ^^

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 25 Jul 2007 04:20 am
Ok me quedaron claras algunas cosas..pero voy a estudiar más del tema.
Existen un Eje más que el... x, y, z ( :o ) XD pregunta extraña..y sin relacion al Flash..O eso ya es.... 4ª Dimension?
De verdad gracias por toda tu ayyuda...
No te quiero molestar más..prefiero comenzar a investigar del tema..solo a mi ritmo...
Y cuando crea que tenga las ideas listas... Consulto..

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 25 Jul 2007 01:43 pm
Si existen o no, aún se discute, pero matemáticamente se puede trabajar con n dimensiones. Lo que significa cualquier cantidad de dimensiones (hasta infinitas).

Profundizaría más en el tema, pero escapa a mis conocimientos.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 06 Ago 2007 07:19 pm
Buenas, antes que nada, para mi es un problema conocido, yo también me interesé por ello cuando tenia también 15 años (ahora tengo 16 XD). También hice lo del rebote con el plano de colisión. Pero me di cuenta de que la cosa no va por ahí. Rebotando con el plano, a veces da un rebote realista, pero muchas veces no. Investigué mucho, y la verdad es que no hay mucha información. Pero al final encontré una página que si lo explicaba, y el resultado: Lo he dejado para cuando tenga la carrera de matemáticas :S. Les aseguro amigos, que el código presente en este hilo no le llega ni a la suela del zapato (en extensión).

Aquí les dejo el link
La verdad es que hay otros ejemplo más complicados que incluyen otros muchos factores:
Otro
Otro
Y otro
Y no estaría de más que hicieran el curioso por toda la web, ya que trata muchos otros temas físicos muy interesantes y útiles.

Bueno, no os desanimeis XD

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

firefox
Citar            
MensajeEscrito el 06 Ago 2007 11:32 pm
Demasiado para mi -.-!

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 07 Ago 2007 04:13 pm
Y para mi XD

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 08 Ago 2007 02:35 pm
En realidad, en el ejemplo de Jaleru el rebote es infinitamente más simple ya que una de las pelotas (la que está en la cabeza) no se mueve con el golpe.

Voy a ver si puedo hacer un tutorial sobre este tema...

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 08 Ago 2007 06:18 pm
Pero que sea físicamente realista, no efectista ;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 09 Ago 2007 01:01 am
Gracias HernanRivas, lo esperare ancioso..
Ojala te funcione!!
Y respecto a que sea mas fisicico que efectista..
Si es fisico, ojala tenga un razonable esplicasion :oops:

:D Gracias.Adios

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 09 Ago 2007 03:44 pm
Ferranpujol, en primer lugar, hacer algo físicamente perfecto en una plataforma con tantas limitaciones como Flash es ridículo. El programa sería excesivamente lento.

Pero en éste caso particular, las cuentas son suficientemente simples como para hacerlo de esa manera. Igualmente, no hay necesidad (en el 99% de los casos) de hacer algo tan preciso cuando hacerlo realista consume menos recursos (y simplifica el código).

De todos modos, ya tengo el 70% del tutorial terminado y aunque te resulte difícil creerlo tiene una basé física muy importante, aunque me esforcé por simplificar al máximo los conceptos.

Como dije. Es simple hacer éste efecto y pienso demostrarlo.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 09 Ago 2007 07:27 pm
Claro, está, yo lo decía porque en este casoen concreto, hacerlo de la forma simple i a priori efectista (plano entre las dos bolas), acaba resultando poco realista...Y hay que diferenciar físicamente perfecto y físicamente completo. Lo primero si se puede hacer, coger una ley y programarla a ella sola: La gravedad, tan simple y real. Pero físicamente completo si que es imposible ya que hay millones de leyes y factores a tener en cuenta.

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 13 Ago 2007 03:03 pm
Poco realista? Los juegos de billar se rigen por reglas muy sencillas. Ahora, si lo que querés es calcular cuánto calor se genera en un golpe, durante el rozamiento, la fricción del aire, etc, también se puede, pero carece de sentido.

No creas que la simplicidad implica pérdida de realismo, justamente eso es lo hermoso de la mecánica newtoniana. Mientras no pruebes lanzar las bolas a la velocidad de la luz.... Las cuentas son simples y elegantes.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 13 Ago 2007 04:50 pm
Pero no es tan simple como dices en este caso. Basta sólo mirar la web que mandé. Ahora, si te ves capaç de hacer una clase para que los que aún no estudiamos matemáticas podamos usarla facilmente...seria de gran ayuda XD. De hecho en esa web ya está puesta pero és para java i no logré traducirla.

PD: Eso puede sonar a reproche o a crítica, pero sin duda no lo es.

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 19 Ago 2007 10:38 pm
Bien, el tutorial quedó medio congelado porque no puedo lograr hacer el rebote con las velocidades y los ángulos (la única forma que conozco es hacerlo con los componentes horizontal y vertical de la velocidad).

Pero, para que Jaleru no se quede con la duda, en caso de que una de las pelotas esté estática, es decir que no se pueda mover las cuentas son (como ya había dicho antes) una pavada.

Si tenemos una pelota que choca a la otra, el ángulo final es igual a:

Código :

var angFinal = 2 * (angPelotas - Math.PI / 2) - angMov;
Donde angFinal es el ángulo de la pelota que se mueve, angPelotas, es el ángulo que forman las 2 pelotas y angMov el ángulo inicial en el que se mueve la pelota.

Si esta explicación no alcanza, avisame que tengo todos los archivos (imágenes y ejemplos en Flash) del tutorial a medio terminar.


PD: Repito, lo que dice la página que posteó Ferranpujol es simple, pero lamentablemente no tiene las ecuaciones para cuando las 2 pelotas están en movimiento (mirá que siempre dice "la pelota A se dirige a otra pelota B inicialmente en reposo"). Esas ecuaciones las desconozco y no las pude encontrar en ningún lado. Nuevamente, si alguien quiere mi tutorial sobre el rebote cuando una pelota está fija o cuando una está inicialmente en reposo me lo pide.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 20 Ago 2007 02:37 am
Ui YO quiero el Tutorial XD PORFAVOR!!!!!!!!!!
Pareciera que te estubiera molestando...pero realmente me supera notablemente lo que es Fisica.

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 21 Ago 2007 06:06 pm
OK, me esforcé y lo completé.

Éste es el resultado

(lo mejor de haberlo terminado es mostrarlo, porque estoy seguro que ferranpujol no me creía)

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox

 

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