2011-01-04 25 views
1

私は円の形をしていますが、達成したいのはマスクされてフレームに入るということです。時計のようにマスクされないので、0から1まで見ることができます0から2、0から3など、私は放射体などで行わなければならないことを知っていますが、数学は本当に私のお茶です。何か案は?時計のような楕円形をアンマスクします

答えて

1

ステップ1:お使いの形状のためのマスクスプライトを作成します

ステップ2:

clockTimeはあなたの時間です
var endAngle:Number = 360/12 * clockTime; 

:あなたが必要な角度を計算します。分の場合は、360/60を使用してください。

ステップ3:あなたはcurvetoといったを使用して円スライスを描画する必要がENTER_FRAME

上にマスクを更新します。

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); 
} 

を(私が撮影したとの関連example by meddlingwithfirから上記のコードを編集した)

あなたendFill()を忘れないでください:それから呼び出して、maskSprite.graphics.clear()maskSprite.graphics.beginFill(0,1)を使用してください!

関連する問題