Hola a todos. He seguido este tutorial del usuario HeartBeast en youtube:
https://www.youtube.com/watch?v=ZFX7IHhZw7g (https://www.youtube.com/watch?v=ZFX7IHhZw7g)
He conseguido que todo funcione tal y como está explicado. Pero no entiendo como se consigue que GMS sepa a que función se refiere cada variable. Intentaré concretar mi duda con el código.
Tengo una room muy simple, con un objeto "suelo" sólido que hace de suelo extendiéndose y haciendo varias plataformas a diferentes niveles.
Tengo un objeto/personaje, que en mi caso se llama "chuck". Puede moverse a derecha/izquierda y saltar. Y tiene estos 2 eventos:
1 Create
/// Declaración de propiedades y variables
grav = 1.1; // Gravedad
spd = 4; // Velocidad
jspd = 12; // Velocidad de salto
hspd = 0; // Velocidad horizontal
vspd = 0; // Velocidad vertical
2 Step
/// Movimientos y colisiones
var izquierda = keyboard_check ( vk_left );
var derecha = keyboard_check ( vk_right );
var salto = keyboard_check ( ord ("Z") );
// Comprueba contacto con suelo
if ( place_meeting (x,y+1,obj_parentsolid)) {
vspd = 0;
// Saltando
if ( salto ) {
vspd = -jspd;
}
} else {
// Gravedad
if ( vspd < 6 ) {
vspd += grav;
}
}
// Mover a derecha
if ( derecha ) {
hspd = spd;
}
// Mover a izquierda
if ( izquierda ) {
hspd = -spd;
}
// Chequea si no se puede mover
if ( (!izquierda && !derecha) || ( izquierda && derecha )) {
hspd = 0;
}
// Colisión horizontal
if ( place_meeting ( x+hspd,y,obj_parentsolid )) {
while ( !place_meeting ( x+sign(hspd),y,obj_parentsolid )) {
x += sign(hspd);
}
hspd = 0;
}
// Movimiento horizontal
x += hspd;
// Colisión vertical
if ( place_meeting ( x,y+vspd,obj_parentsolid )) {
while ( !place_meeting ( x,y+sign(vspd),obj_parentsolid )) {
y += sign(vspd);
}
vspd = 0;
}
// Movimiento vertical
y += vspd;
}
Mi duda es, por ejemplo en la sección "Mover a derecha". Como sabe GMS que cuando pongo hspd, me refiero a la función "hspeed"?? Y que spd es "speed"?? Es que no logro entender como es que funciona, y si no lo entiendo... no he aprendido nada.
Una explicación para dummies??
Gracias y un saludo.
Fijate bien en el codigo del Step Event.
Cuando tu mueves el personaje lo único que haces es mover una imagen hacia un lado horizontal X o hacia un lado vertical Y
(http://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Coordinate_with_Origin.svg/220px-Coordinate_with_Origin.svg.png)
En el caso del 3D existe la profundidad que vendría a ser la variable Z. Si te fijas bien en el Step Event hay una zona que dice
// Colisión horizontal
if ( place_meeting ( x+hspd,y,obj_parentsolid )) {
while ( !place_meeting ( x+sign(hspd),y,obj_parentsolid )) {
x += sign(hspd);
}
hspd = 0;
}
// Movimiento horizontal
x += hspd;
Es decir cuando tu le dices a Game Maker
x += hspd;
Es lo mismo que si tu le dijeras
x += 4; //Moverse 4 pixeles a la derecha en cada Step del juego ya que este se repite.
Él lo único que ha hecho ha sido crear una variable que guarde el valor de la X, de tal forma que cuando quieras cambiarlo vayas al Create Event o a donde lo tengas y lo cambies sin más sin tener que estar buscando lineas de código.
Pero recuerda esto siempre, Game Maker funciona con 2 dimensiones, es decir, Y y X, si fuera 3D pues jugaría con 3 dimensiones X, Y y Z.
Además "speed" y "hspeed" son variables, no funciones.
En el código, en vez de asignar valores a las variables hspeed, vspeed, etc., para dejar que GM haga el desplazamiento del personaje de forma automática, el desplazamiento se hace de forma más controlada haciendo sumas y restas a las variables "x" e "y", como explicaron anteriormente.
El manejo de x e y, si que lo entiendo. Ya que en algún momento aparecen como tal ( "x = hspd" por ejemplo ). Pero entonces en este tutorial, aunque hay variables como "grav". No se modifica la gravedad del objeto en ningún momento, verdad? Se juega con "y" y su velocidad?
Gracias por las respuestas.
Cita de: DHX en Octubre 11, 2014, 05:32:51 PM
No se modifica la gravedad del objeto en ningún momento, verdad? Se juega con "y" y su velocidad?
Nada impide jugar con las variables que quieras, pero en la mayoría de juegos la gravedad no se toca (sería raro que la gravedad pueda variar, por ejemplo un tiempo sea 5, otro 2, otro 9, etc). Lo más común es que se activa (tiene un valor mayor 0) cuando el jugador salta y se desactiva (se hace 0) cuando el personaje ha contactado con el suelo (para evitar que lo atraviese).
Gracias por las respuestas. Creo que ya lo entiendo :-[ soy un poco zoquete