Mayo 04, 2011, 03:53:23 AM Ultima modificación: Mayo 07, 2011, 12:15:01 AM por 006 Time
Hola makeros... otra vez les vengo con un problema casi imposible de resolver... bien... pasa lo siguiente, estoy haciendo un juego, en el cual se puede girar la view de 90? en 90? (con view_angle), asi el nivel queda en varias direcciones... lo que quiero lograr, es que por ejemplo, cuando la view este de cabeza, la gravedad del player tambien quede de cabeza, para lograr que siempre caiga hacia la parte inferior de la pantalla (como deve ser), y no que caiga hacia arriba, ni hacia los costados... no se si me explico... ya lo he intentado hacer de un monton de veces, y no me resulta de ninguna manera... si no logre explicarme bien, les dejo un ejemplo adjunto... con Z se gira hacia la izquierda y con X hacia la derecha... de antemano muchas gracias y que tengan un buen dia...

Solo tenes que cambiar gravity_direction a la nueva (0,90,180,270) al mismo tiempo que giras la view.

Mmm... probe, pero no me resulto... mmm, si pudieras modificar el ejemplo que deje, te lo agradeceria mucho...

#3 Mayo 04, 2011, 11:16:02 PM Ultima modificación: Mayo 05, 2011, 01:13:50 AM por brunoxzx
MMM Ok te ayudo con esto, pero no en el editable que mandaste ya que no me llevo mucho con D&D tendr?s que adaptarlo a tu juego por ti mismo.

Espera unos 5 mins en lo que lo termino.

Edit: Perdon por la tardanza pero se me desconecto la laptop que por alguna extra?a raz?n no tenia bater?a.

pero aqu? esta el ejemplo, si no lo quieres descargar dejo los scripts
Ev Create:
[gml]//declaracion de vatriables
vel=4
grav_x=0
grav_y=0
dir=0
[/gml]

Ev step:[gml]//Obtencion de el componente horizontal y vertical de la gravedad y guardarlo en variables
grav_x=lengthdir_x(1,gravity_direction)
grav_y=lengthdir_y(1,gravity_direction)

//calcula si hay gravedad o no dependiendo de si hay un muro debajo de ti
gravity=place_free(x+grav_x,y+grav_y)*.5

//revisa acia que lado te estas moviendo dependiendo de que tecla presiones
dir=keyboard_check(vk_right)-keyboard_check(vk_left)

//movimiendo perfecto
for(i=0;i<vel;i+=1){x+=place_free(x+dir*grav_y,y)*dir*grav_y; y-=place_free(x,y-dir*grav_x)*dir*grav_x}

//salto
if !place_free(x+grav_x,y+grav_y) && keyboard_check_pressed(vk_up){hspeed+=grav_x*-6 vspeed+=grav_y*-6}

//gira la view
view_angle[0]=(view_angle[0]+(sin(degtorad(-gravity_direction-90-view_angle[0]))*8))

image_angle=view_angle[/gml]

Colicion con solidos.
[gml]move_contact_solid(direction,12)
vspeed=0
hspeed=0[/gml]

Muchas gracias brunoxzx... ese codigo es muy util... me sirvio mucho, pero hay algo... con ese codigo, la gravedad del player cambia de direccion dependiendo al lugar que este (al menos eso entendi...), y la idea de mi juego es que al presionar la "Z" se mueva la view y la gravedad del player hacia la izquierda, y con la "X" hacia la derecha... al ser asi ntambien se queda pegado en las paredes aveces... pero igual muchas gracias por el codigo... te has ganado un +1... si pudieras correjir ese peque?o detalle, te lo agradeceria muchisimo... Que tengas un buen dia...

no de echo la gravedad cambia aleatoriamente entre 0, 90, 180 y 270  al presionar la barra espaciadora y lo de que se queda atorado no me hab?a dado cuenta ya que lo hice muy a la carrera, pero se debe a que el sprite del ejemplo es irregular y entra a los muros pero como tu juego es de una bola no deber?a de pasar.

Te dejo un adjunto con un error de colisi?n corregido pero no arreglara que se quede atorado en los muros cercanos si el sprite es irregular, y el cambio de gravedad como lo quer?as.

Oh... genial... ahi quedo perfecto... gracias por la ayuda... muchas gracias... doy por solucionado el tema...  :D