2011-01-04 8 views
1

Ich habe eine Kreisform, und was ich erreichen möchte, ist, dass es maskiert wird und dann Frame eingeben es zould sollte wie eine Uhr entlarvt werden, so dass Sie von 0 bis 1 sehen, dann von 0 bis 2, 0 bis 3, usw., ich weiß, dass es mit Radianten etc. getan werden muss, aber Mathe ist nicht wirklich meine Tasse Tee. Irgendwelche Ideen?ein Oval wie eine Uhr demaskieren

Antwort

1

Schritt 1: Erstellen Sie eine Maske Sprite für Ihre Form

Schritt 2: Berechnen Sie den Winkel, den Sie brauchen:

var endAngle:Number = 360/12 * clockTime; 

wo Uhrzeit Ihre Stunden. Verwenden Sie für Minuten 360/60.

Schritt 3: Aktualisieren Sie die Maske auf ENTER_FRAME

Sie haben ein Kreissegment mit curveTo zu ziehen. Verwenden Sie maskSprite.graphics.clear() und maskSprite.graphics.beginFill(0,1), dann rufen:

function drawClockSlice (sprite : Sprite, centerX : Number, centerY : Number, endAngle : Number, radius : Number) : void 
{ 
    var g : Graphics = sprite.graphics; 
    var controlPoint : Point; 
    var anchorPoint : Point; 

    var startRadians:Number = Math.PI/180 * -90; 
    var endRadians : Number = Math.PI/180 * (endAngle-90); 

    var difference : Number = Math.abs(endRadians - startRadians); 
    var divisions : Number = Math.floor(difference/(Math.PI/4)) + 1; 
    var span : Number = difference/(2 * divisions); 
    var controlRadius : Number = radius/Math.cos(span); 

    g.moveTo(centerX, centerY); 
    g.lineTo(centerX + (Math.cos(startRadians) * radius), centerY + Math.sin(startRadians) * radius); 

    for (var i : Number = 0; i < divisions; ++i) 
    { 
     endRadians = startRadians + span; 
     startRadians = endRadians + span; 
     controlPoint = new Point(centerX + Math.cos(endRadians) * controlRadius, centerY + Math.sin(endRadians) * controlRadius); 
     anchorPoint = new Point(centerX + Math.cos(startRadians) * radius, centerY + Math.sin(startRadians) * radius); 
     g.curveTo(controlPoint.x, controlPoint.y, anchorPoint.x, anchorPoint.y); 
    } 
    g.lineTo(centerX, centerY); 
} 

(Ich habe genommen und bearbeitet den obigen Code aus einem verwandten example by meddlingwithfir)

Sie nicht Ihre endFill() vergessen!