Buenas chicos, pues llevo un par de dias dandole vueltas a una situacion que me surgido.

Os explico la idea y os pongo el codigo,
El caso es que tengo una pelota que al chocar con la pared, esta debe rebotar, pero quiero que el movimiento sea lo mas real posible teniendo en cuenta la distancia recorrida antes de chocar con la pared, y la fuerza ya imprimida y perdida. No se si me explico bien. Que sea un rebote lo mas logico y razonable posible.

Para crear el movimiento de la pelota, utilizo el siguiente codigo;

pasedistancia = point_distance(x,y, (global.PASEX, (global.PASEY));
move_towards_point((global.PASEX), (global.PASEy), min(20, pasedistancia));

con una friction de -1 para que la pelota vaya persiendo velocidad mientras avanza.

global.PASEX y global.PASEY son las coordenadas X e Y del click del raton, es decir, hacia donde se dirige la pelota.

En el caso de que antes de que llegue a pararse, y chocase con una pared. Quiero realizar el movimiento de rebote lo mas natural posible.

Para ello, habia pensado ejecutar en el momento de la colision con la pared, otro move_towards, con los nuevos varoles, teniendo el espacio ya recorrido y la fuerza ya perdida.

EL caso es que al realizar el nuevo move_towards me funciona, la pelota rebota, pero esta lo hace de manera ilogica y nada natural, volviendo a imprimir mas velocidad, y mas disntancia.

Asi que como puedo, sacar los valores del espacio, recorrido y la velocidad ya imprimida.

Bueno espero vuestro ayuda, porque ya llevo 2 dias con este problema, estoy casi apunto, pero no termino de perfilarlo perfecto.

Espero vuestra ayuda como siempre, que nunca me fallais. Saludos a todos!!!!  ;)
PCNONOGames  www.pcnono.es

una pregunta, tu codigo move_towards esta en el step o en el create? en caso de que solo se ejecute en el create con colocar en el evento colision
[gml]
speed = speed*(-1);
friction = friction*(-1);

[/gml]
deberia de bastar
no puedo creer que me hice un tumblr.
YGE Productions yep, otro tumblr.
y como no, el manual tambien

Para que el rebote sea natural, la pelota no debería dirigirse siempre al punto (PASEX,PASEY), y tampoco se debería signar a friction un valor negativo porque eso aumenta la rapidez.

Para calcular el rebote se necesita saber la dirección perpendicular a la superficie de contacto, eso depende del diseño de los niveles. Supongo que usas una habitación rodeada con bloques y el modo de juego es algo parecido a billar, adjunto un archivo de ejemplo.

Para que la pelota se detenga al llegar al punto de pase podrías comparar la distancia con un valor determinado, y si es menor capturar la pelota.

Muchas gracias por vuestras respuesta.

Si Clamud la idea es esa un rebote tipo billar. El archivo que me has adjuntado, como se abre?? Yo uso el game maker studio

Cita de: Clamud en Noviembre 16, 2015, 05:32:56 PM
Para que el rebote sea natural, la pelota no debería dirigirse siempre al punto (PASEX,PASEY), y tampoco se debería signar a friction un valor negativo porque eso aumenta la rapidez.

Para calcular el rebote se necesita saber la dirección perpendicular a la superficie de contacto, eso depende del diseño de los niveles. Supongo que usas una habitación rodeada con bloques y el modo de juego es algo parecido a billar, adjunto un archivo de ejemplo.

Para que la pelota se detenga al llegar al punto de pase podrías comparar la distancia con un valor determinado, y si es menor capturar la pelota.
PCNONOGames  www.pcnono.es

Muchas gracias Clamud, acabo de ver el ejemplo que me has enviado y es justo lo que necesitaba.
Funciona perfecto. Gracias.

Cita de: Clamud en Noviembre 16, 2015, 05:32:56 PM
Para que el rebote sea natural, la pelota no debería dirigirse siempre al punto (PASEX,PASEY), y tampoco se debería signar a friction un valor negativo porque eso aumenta la rapidez.

Para calcular el rebote se necesita saber la dirección perpendicular a la superficie de contacto, eso depende del diseño de los niveles. Supongo que usas una habitación rodeada con bloques y el modo de juego es algo parecido a billar, adjunto un archivo de ejemplo.

Para que la pelota se detenga al llegar al punto de pase podrías comparar la distancia con un valor determinado, y si es menor capturar la pelota.
PCNONOGames  www.pcnono.es

en la ventanita de welcome, dale a import, y busca manualmente la ruta, asegurate que el filtro (abajo derecha) está en ver archivos gm81 y tal, entonces lo importas, te saldrá un mensaje de warning, no te preocupes, solo es un aviso de funciones obsoletas, eso lo dice siempre a no ser que marques lo contrario y ahi ya guarda el proyecto para transformarlo a gms

EDITO: FAIL xD posteamos a la vez xD
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]