quiero saber como hacer de que haga todo esto
direction = image_angle;
if(keyboard_check(vk_left))
{
image_angle += 3.5;
}
else if(keyboard_check(vk_right))
{
image_angle -= 3.5;
}
if(keyboard_check(vk_up))
{
speed = 5;
} else {
speed = 0;
}
pero que todo lo haga suave y que el image angle cuando le des a un lado sea suave su movimiento, osea de que no pare asi todo feo si no suavemente igual que con la velocidad y eso.
Lo que yo entiendo es que el cambio de velocidad debe ser gradual. Si quieres que la aceleración sólo sea lineal define un valor para la variable friction, ejemplo: [gml]friction = 0.2[/gml]
Si también quieres que la aceleración sea angular y quieres que la aceleración lineal sea más agradable, usa un código como éste:
[gml]
///EVENTO CREATE: Inicializar
a_ang = 0.2; //aceleración angular
a_lin = 0.2; //aceleración linear
v_ang = 0; //velocidad angular
speed = 0; //velocidad linear
direction = 0;
[/gml]
[gml]
///EVENTO STEP: Movimiento
//Angular
if( keyboard_check(vk_left) ) { //si se presiona izquierda
v_ang = min( v_ang+a_ang, 3.5 ); //cambiar v_ang hasta 3.5
}
else if( keyboard_check(vk_right) ) {//si se presiona derecha
v_ang = max( v_ang-a_ang, -3.5 ); //cambiar v_ang hasta -3.5
}
else { //si no se presiona izquierda ni derecha
if( v_ang < 0 ) v_ang = min( v_ang+a_ang, 0 ); //v_ang se hace cero
if( v_ang > 0 ) v_ang = max( v_ang-a_ang, 0 ); //de forma gradual
}
direction += v_ang; //cambiar la deirección
image_angle = direction;
//Lineal
if( keyboard_check(vk_up) ) { //si se presiona arriba
speed = min( speed+a_lin, 5 ); //aumentar speed hasta 5
} else { //si no se presiona arriba
speed = max( speed-a_lin, 0 ); //disminuir speed hasta 0
}
[/gml]
Ajusta los valores de aceleración hasta que sean agradables.
gracias pero para entender el script que es min y max?, me podrias decir la definicion TU para que sirven esas 2 funciones?
Esencialmente lo que hacen min y max son devolver el menor y mayor de los argumentos o parámtros pasados a dicha función.
por ejemplo:
[GML]
min (1,2,3,4,5); // devolverá 1 puesto que es el menor
o
max (1,2,3,4,5); // devolverá 5 puesto que es el mayor
[/GML]
cada una de las funciones soporta hasta 16 parametros.
Es exactamente como dice Silver_light, uso esas funciones porque el código queda más reducido; la expresión
[gml]v_ang = min( v_ang+a_ang, 3.5 );[/gml]
es equivalente a
[gml]
v_ang += a_ang;
if( v_ang > 3.5 ) v_ang = 3.5;
[/gml]
se mantiene el valor de v_ang dentro del límite y el código de dos líneas se hace en una. También se puede usar la función clamp, pero uso min y max porque sólo necesito 2 argumentos y el código es compatible con versiones anteriores a :GMS: