Điều này khá gọn gàng!
Bạn sắp sửa thực hiện đúng cách nhưng bạn thực sự nên sử dụng hàm atan2. Điều này loại bỏ sự cần thiết cho bất kỳ 0 kiểm tra.
Chức năng atan2 mang đến cho bạn một góc mà là ngược từ vector x dương
(1, 0) --->
Những con ong là 90 độ ra khỏi góc bắt đầu này, do đó bạn phải trừ 90 độ từ hướng. (tùy thuộc vào cách mà bạn thực hiện phép tính dy và dx, bạn có thể cần phải thêm)
Bạn có thể thấy hướng thay đổi nhanh chóng, vì vậy bạn có thể xem xét giới hạn thay đổi tiếp theo cho một tập hợp các thay đổi gây ra một góc thay đổi dưới ngưỡng nào đó. Điều này sẽ làm cho chuyển động mượt mà hơn một chút.
Tôi thực sự sẽ đi về nó bằng cách tạo ra một góc giữa nói -pi/8 và pi/8 radian, và một chiều dài ngẫu nhiên. Về cơ bản sử dụng tọa độ cực. Sau đó thêm ngẫu nhiên mới này cực bù đắp cho x và vị trí y như
newX = currentX + (randomLength * cos(randomAngle + currentAngle)) and
newY = currentY + (randomLength * sin(randomAngle + currentAngle))
Nếu bạn làm việc với góc bạn cũng có thể tạo những hiệu ứng tự nhiên hơn như thế nào nếu bạn muốn các con ong để ở lại trong một khu vực nhất định, bạn có thể buộc một thiên vị về phía trung tâm của khu vực khi chúng tiến gần hơn và gần hơn với mép.
Cập nhật:
Vì vậy, tôi đã xem xét kỹ hơn. Vấn đề là bạn mong đợi. Xoay vòng để đặt xoay khi nó thực sự thêm vào vòng quay
Có 2 tùy chọn để sửa lỗi này.
Xoay bởi sự khác biệt giữa trước và góc hiện
Đặt xoay bằng cách sử dụng phương pháp .transform
Bạn có thể thấy giải pháp 2 trong hành động ở đây http://jsfiddle.net/c5A2A/
Nguồn
2012-03-07 16:25:31
Nếu bạn đang thực sự sử dụng ong tôi chỉ có một bộ để thực sự thất thường và có một đàn theo các nhà lãnh đạo. – Incognito
bạn có thể điều chỉnh tỷ lệ cược một chút để nó không hoàn toàn ngẫu nhiên. Giống như 85% ngẫu nhiên và 15% hướng cuối cùng hoặc một cái gì đó tương tự.Tôi nghĩ rằng điều này sẽ làm cho nó đi một chút nhiều hơn để hướng về phía trước – ajax333221