Hola, hago esta consulta pq a mi me gustaria saber la logica del script, entiendo algunas cosas pero hay otras que no entiendo mucho aca se los dejo, pero necesito saber cada cosa por ejemplo en la ultima parte donde usa while no entiendo nada de lo que hace y usa un vsp = 0 y un hsp = 0 y ahi deberia de haber un else pero no funciona el script pq ya lo comprobe
sabiendo la logica del script se me seria mas facil memorizarlo
Evento Create:
vsp = 0//Vel ver.
hsp = 0 //Vel hor.
movespeed = 5
jumpspeed = 7
grav = .5 //Gravedad
Evento Step:
var lkey = keyboard_check(vk_left);
var rkey = keyboard_check(vk_right);
var jkey = keyboard_check(vk_up);
if(place_meeting(x,y+1,obj_solid))
{
vsp = 0;
if(jkey)
{
vsp = -jumpspeed; //Esto lo entiendo
}
}
else
{
if(vsp < 10)
{
vsp += grav;//Esto no lo entiendo tanto la verdad
}//Pq dice de que si la velocidad vertical es menor a 10 pero cuando va a saltar es -10 entonces
//siempre deberia de estar activo esto, me podrian decir que significa mas o menos esto?
}
if(rkey)
{
hsp = movespeed;
}
if(lkey) //Esto lo entiendo
{
hsp = -movespeed;
}
if(!rkey && !lkey || rkey && lkey)//Esto lo entiendo
{
hsp = 0;
}
if(place_meeting(x + hsp,y,obj_solid))//Este y los whiles no los entiendo
{
while(!place_meeting(x + sign(hsp),y,obj_solid))
{
x += sign(hsp)
}
hsp = 0;//Esto no entiendo pq esta aca ya que deberia de no poder moverse
}
x += hsp//Esto no lo entiendo ya que si le cambias el orden no sirve igual que con el de la ultima linea
//Pero obviamente dice de que todo lo que pase en hsp va hacia la coordenada x igual que con vsp
if(place_meeting(x,y+vsp,obj_solid))
{
while(!place_meeting(x,y +sign(vsp),obj_solid))
{
y += sign(vsp)
}
vsp = 0;
}
y += vsp
Me ayudarian mucho a entender este script ya que me gusta pq no utiliza las horribles variables internas como vspeed, hspeed, gravity, ahi en las anotaciones dije lo que no entiendo casi, gracias de antemano si me ayudan!!!!
if(vsp < 10)
{
vsp += grav;//Esto no lo entiendo tanto la verdad
}
Esto es la gravedad del personaje. La velocidad del salto es -7, pero no puedes hacer que salte por siempre hacia arriba, al momento de saltar, debe entrar en juego la gravedad para que vaya cayendo. A vsp(negativa) se le va sumando 0.5 de la gravedad, lo que va haciendo que en cada paso vsp sea -6.5, luego -6, luego -5.5, etc.
if(place_meeting(x + hsp,y,obj_solid))//Este y los whiles no los entiendo
{
while(!place_meeting(x + sign(hsp),y,obj_solid))
{
x += sign(hsp)
}
hsp = 0;//Esto no entiendo pq esta aca ya que deberia de no poder moverse
}
Aquí el "truco" es que en el primer place_meeting se está usando x+hsp, que es lo mismo que (x + 5) para verificar si hay colisión contra la pared. Pero en el segundo place_meeting se usa (x + sign(hsp), que es lo mismo que (x+1) (en el caso de moverse a la derecha)
Suponiendo que se presiona la tecla DERECHA, lo que hace el código de arriba, en lenguaje simple es "si estoy a una distancia de 5 pixeles de la pared (a la derecha), voy verificando que no haya colisión a la derecha (de UNO EN UNO, PIXEL, POR PIXEL) y si no la hay, me voy moviendo (DE UNO EN UNO) hasta topar con la pared. Ojo que en el ciclo while, se pueden dar hasta 5 "pasitos", todos en el mismo STEP porque es un ciclo. Como al final, el código del ciclo ya movió al jugador hasta ponerlo exactamente junto a la pared, pues ya no tiene caso mover más al jugador, porque precísamente, ya llegó a la pared, por eso al final está la orden hsp = 0
La misma explicación de arriba se usa para la parte final del código, sólo que esa se usa para colocar al jugador sobre el piso, por eso usa vsp e y en lugar de hsp y x
Ah y la verdad, LA MISMA idea de este script se puede aplicar usando las "horribles" variables hspeed, vspeed y gravity y funcionaría igual.
Gracias ya entendi los whiles pero lo del
if(vsp < 10){}
aplica con -10 y 10?
Cita de: vitail en Febrero 12, 2015, 11:02:20 PM
Gracias ya entendi los whiles pero lo del
if(vsp < 10){}
aplica con -10 y 10?
Aplicaría con -10, porque -10 es menor a 10, pero 10 no es menor que 10, en este caso no aplicaría. Pero fíjate que la última línea de todo el código es
y += vsp
Así que en realidad no importa si aplica a 10 o valores mayores a 10, por que en ese momento, el jugador ya va cayendo hacia abajo (es decir, con gravedad), y en todos los plataformeros, siempre se impone un límite a la velocidad de caída. Eso hace el código del if, impone un límite a la velocidad de caída (después de 10, ya no se aumenta más vsp)
Ah gracias ya entendi el concepto de la gravedad!!!