2011-09-01 10 views
6

¿Cómo puedo suavizar las animaciones en Scratch? Principalmente, lo quiero de tal manera que cuando presiona y mantiene presionada la flecha derecha, vaya a la derecha sin ningún tic nervioso notable. Además, el rasguño te hace esperar un segundo para repetir cuando sostienes una flecha. ¿Cómo puedo suavizar esto?Suavizar el movimiento de los sprites en cero

Respuesta

2

Con Scratch, puede obtener movimientos muy suaves utilizando Glide con distancias largas o intervalos. Sin embargo, la desventaja de este método es que la operación Glide debe finalizar antes de que el sprite pueda hacer ninguna detección, como detección de colisiones o bordes. Esto a menudo es indeseable.

El pequeño retraso del que está hablando cuando presiona una tecla, está directamente relacionado con la velocidad de repetición de su teclado. Cuando presiona una tecla en su teclado, ese evento clave se envía, pero luego hay un pequeño retraso antes de que la repetición se active. Si puede encontrar una manera de cambiar la velocidad de repetición del teclado de su sistema, esto se extendería a Scratch.

Existe un límite en cuanto a la optimización que puede hacer en Scratch. Es, después de todo, un entorno de programación de nivel de entrada muy básico (pero muy divertido). :)

2

que podría hacer hasta que "flecha no presionado"

cuando se pulsa la flecha de repetición mover (o deslizamiento) hasta que no flecha pulsada

entonces no va a comprobar pulsando la tecla a intervalos fijos, haciendo que el movimiento sea más suave.

3

Sé que es una vieja pregunta. Pero en caso de que alguien esté buscando una solución, revise este proyecto de cero: http://scratch.mit.edu/projects/276298/

Simplemente agregue siempre el ciclo y dentro de este lazo compruebe si se presiona la tecla de flecha. Si es así, muévete. De esta manera no dependerá de la velocidad de repetición del teclado.

1

Usted puede hacer esto:

When flag pressed 
forever 
    if (right arrow pressed?) then 
    change xs by 1 
    xs = xs * 0.8 
    change x by (xs) 

que comprueba cada vez que si se pulsa la flecha hacia la derecha, y si es así, cambia la variable xs por uno. Más tarde, multiplica xs por 0.8, por lo que el valor decae a la vista.

Luego cambia la x del sprite por el var xs.

+0

** ADVERTENCIA: ¡Error en el código! ** ¿Dónde está la restauración de 'xs'? El valor de 'xs' irá muy rápidamente de' 1' a '0.8' a' 0.64' a '0.512' a' 0.4096' ... ¡y eso suponiendo que comience en 1! Como no hay 'conjunto [xs v] en (número)', el valor ** nunca se restablecerá **. – wizzwizz4

+0

El código funciona. Cualquier valor de 'xs' se vuelve exponencialmente más pequeño cuando no se presiona la tecla de la flecha hacia la derecha. Así que 'xs' se acerca a cero cuando no se pulsa ninguna tecla y tiene un valor de 4 (calculado por 0.8/(1-0.8)) cuando se mantiene presionada la tecla de flecha derecha. –

0

Una forma de hacerlo es usar variables y bloques personalizados para crear argumentos que suavicen el movimiento. Agregue una variable llamada velocidad x y use un cambio de X para siempre por velocidad X. No tengo instantáneas ni ejemplos, pero puede usar scripts en el bloque personalizado para deslizarlos suavemente.