AS3 Dönme kaydırıcısından sürekli değer

0 ile 1 arasında bir okuma yapmak için bir daire etrafında sürüklediğim bir kadran var.

Böyle bir şey:

dx = mouseX-centerX;
        dy = mouseY-centerY;
        rad = Math.atan2(dy,dx);

        rad += offset;

        Tweener.addTween(knob,{y:centerY - Math.cos(rad)*radius, time:.1,  transition:"easeOutSine"});
        Tweener.addTween(knob,{x:centerX + Math.sin(rad)*radius, time:.1,  transition:"easeOutSine"});
        knob.rotation = rad * 180/Math.PI;

Bu iş harikadır, kaydırıcının 359 dereceden 1 dereceye çıkması dışında, 0 ile 1 arasındaki değerlerim sıfıra döner. (Hangi değer kaymakamın açısına bağlı olarak anlamlıdır)

Kadranın temelde 359 dereceden 361'e ve daha ileriye geçmesi için bir yol bulmaya çalışıyorum.

Kafamda: Fare sürüklememin bir sonraki değerinin 360 derecelik noktayı geçip geçmediğini ve toplamı 360'a döndürüp sıfırlamaya ve 361 dereceye kadar devam edip etmeyeceğine bakmam gerekiyor.

Bunu kodun içine nasıl koyacağımı bilemiyorum ...

0

1 cevap

Düğmeyi döndürdüğünüz her karede, açıyı doğrudan açı yerine açısal mesafeden kontrol edin.

Önceki kareler açısını kaydedin ve farkın pozitif mi yoksa negatif mi olduğunu görün.

var rad = Math.atan2(dy, dx);
var diff = rad - oldRad;
oldRad = rad;
if( diff > Math.PI )
  diff -= Math.PI * 2;
if( shortestAngle < -Math.PI )
  diff += Math.PI * 2;

diff should contain a value that if it's been rotated to the right, is positive (or negative if rotated left). Simply add that to the total angle.

Kodda bazı hatalar olabilir (eski bir projeden aldı), ama bu onun özü :)

Umarım yardımcı olur!

0
katma