¡Esto es bastante limpio!
Lo está haciendo de la manera correcta, pero en realidad debería usar la función atan2. Esto elimina la necesidad de cualquier 0 controles.
La función atan2 le da un ángulo que es en sentido antihorario de la x positiva vector
(1, 0) --->
las abejas están 90 grados fuera de este ángulo de partida por lo que debe restar 90 grados desde la dirección. (dependiendo de la vuelta que realice el cálculo de dy y dx, puede que necesite agregar)
Puede encontrar que la dirección cambia rápidamente, por lo que podría considerar limitar el siguiente cambio a un conjunto de cambios que provocan un ángulo cambiar debajo de un umbral Esto hará que el movimiento sea un poco más suave.
De hecho lo haré generando un ángulo entre decir -pi/8 y pi/8 radianes, y una longitud aleatoria. Esencialmente usando coordenadas polares. A continuación, agregue este nuevo aleatoria polar desplazamiento a la posición xey como
newX = currentX + (randomLength * cos(randomAngle + currentAngle)) and
newY = currentY + (randomLength * sin(randomAngle + currentAngle))
Si trabaja con ángulos también se puede obtener efectos más naturales como si desea que las abejas a permanecer dentro de un área determinada, puede forzar una sesgo hacia el centro del área a medida que se acercan más y más al borde.
Actualización:
Así que he echado un vistazo más de cerca. El problema es que usted espera .rotar para establecer la rotación cuando en realidad se agrega a la rotación
Hay 2 opciones para solucionar esto.
Girar por la diferencia entre el anterior y el ángulo actual
Establecer la rotación usando el método .transform
Usted puede ver la solución 2 en acción aquí http://jsfiddle.net/c5A2A/
Si realmente estás usando abejas, solo tengo un juego para ser realmente errático y tener un enjambre seguir al líder. – Incognito
puede manipular las probabilidades un poco para que no sea del todo aleatorio. Como 85% al azar y 15% la última dirección o algo así.Creo que esto lo hará ir un poco más hacia adelante – ajax333221