Hola chic@s. Veamos... tengo un planeta que rota sobre si mismo a una velocidad de 0.2
Al iniciarse la room se crea una instancia del objeto casa justo arriba del planeta. Mi idea es que la casa caiga hasta entrar en contacto con el planeta y cuando esto ocurra, que la casa en la posición que ha colisionado se quede quieta y empiece a rodar con el planeta.
De momento consigo que caiga y al colisionar con el planeta que se detenga y se una a este. ( de echo si el planeta se mueve en ese momento de izquierda a derecha la casa se mueve junto al planeta, pero solo en su movimiento lateral... )
Alguien tiene alguna idea de como poder hacer que la casa ruede junto al planeta?
gracias
primero podrías coger el ángulo, la dirección entre el planeta y la casa pegada. Suponiendo que ambos tienen el origen de coordenadas en el centro... desde el objeto casa.
[gml]ang = point_direction(objPlaneta.x, objPlaneta.y, x, y);[/gml]
Con eso tenemos la dirección. Suponiendo que el radio del planeta es 30, y el "radio" de la casa es 5...
[gml]x = objPlaneta.x+35*(cos(degtorad(ang)));
y = objPlaneta.y-35*(sin(degtorad(ang)));[/gml]
haz comprobaciones y verás que funciona. Si ang = 0 (la casa está a la derecha del planeta), cos(0) = 1 y sin(0) = 0, así que la casa se pondrá a x+35 y y-35*0, o sea, y.
Luego faltaría que la casa rote... algo como...
[gml]image_angle = ang-90;[/gml]
Si no me equivoco, puedes ir probando a partir de estas ideas :D
En la variable local "ang" se guarda el resultado de ejecutar el método point_direction() pasando como parámetros la distancia que hay del centro del objeto planeta al objeto casa.
Y luego se supone que una vez ha detectado la colisión la posición x,y de la casa pasa a ser las variables "x" e "y" que guardan el resultado de esa operación con radios senos y cosenos, imagino. Lo de la rotación si me quedo claro.
Lo que no me queda muy claro es es cuando se debe ejecutar la lógica del segundo paso... perdona mi lio mental, estoy empezando. gracias por tu tiempo y por responder ;) seguiré investigando.
No entiendo muy bien, pero si dices que el planeta rota a una velocidad de 0.2, entiendo que avanza un grado cada cinco pasos.
Otro método alternativo al que propuso DarkKRuleR sería sin realizar el cálculo del ángulo de la casa en cada paso, símplemente una vez que la casa haga contacto con el planeta, hacer que la casa gire un grado cada cinco pasos.
Los 3 fragmentos que puse pueden ir todos en step, en objCasa.
El tema es que la casa debe estar siempre a una distancia X (radio planeta + radio casa) del centro del planeta, dando vueltas a su alrededor. Eso lo logras jugando con los senos y cosenos a partir del ángulo de la casa respecto al centro del planeta, justamente como te puse. Y al final rotamos la casa, para que su suelo esté pegado al planeta, sino su suelo siempre miraría hacia abajo :)
penumbra, no entiendo lo que dices de "la casa gire un grado cada cinco pasos". Eso es lo que hace mi código, hace que la casa gire acorde al planeta ???
El planeta al rotar no avanza. Solo va girando sobre si mismo. Y el objeto casa no esta en órbita con el planeta dándole vueltas..
Al iniciar la room simplemente se crea una instancia "casa" unos 200 pixeles arriba del planeta y cae por una gravedad aplicada a la "casa"...
Yo controlo bastante el 3d. No hay ninguna función o acción para "linkear" objetos? Solo busco que cuando toque el planeta se peque a este y ya no se mueva. Solo se vea afectado por la rotación del planeta.
Vale, fallo mío. ang no debe ser el point_direction, sino que debe ser objPlanet.image_angle.
Hice un ejemplo en 2 minutos y funciona :D
sólo le pones a la casa:
[gml]ang = objPlaneta.image_angle;
x = objPlaneta.x+35*(cos(degtorad(ang)));
y = objPlaneta.y-35*(sin(degtorad(ang)));
image_angle = ang-90;[/gml]
A partir de ahí deberías poder experimentar con el tuyo :D
Muchas gracias. Voy a darle a ver ;)