Actionscript 3 像钟表一样揭开椭圆形的面具
我有一个圆的形状,我想实现的是,它被遮住,然后不进入画面,它会像时钟一样被揭穿,所以你可以看到从0到1,然后从0到2,0到3,等等,我知道这必须用弧度等来完成,但数学不是我真正喜欢的。有什么想法吗?步骤1:为你的形状创建一个面具精灵 步骤2:计算所需的角度:Actionscript 3 像钟表一样揭开椭圆形的面具,actionscript-3,Actionscript 3,我有一个圆的形状,我想实现的是,它被遮住,然后不进入画面,它会像时钟一样被揭穿,所以你可以看到从0到1,然后从0到2,0到3,等等,我知道这必须用弧度等来完成,但数学不是我真正喜欢的。有什么想法吗?步骤1:为你的形状创建一个面具精灵 步骤2:计算所需的角度: var endAngle:Number = 360 / 12 * clockTime; 你的时间在哪里。使用360/60分钟 第3步:刷新输入帧上的掩码 您必须使用curveTo绘制饼图切片。使用maskSprite.graphics.c
var endAngle:Number = 360 / 12 * clockTime;
你的时间在哪里。使用360/60分钟
第3步:刷新输入帧上的掩码
您必须使用curveTo绘制饼图切片。使用maskSprite.graphics.clear()
和maskSprite.graphics.beginll(0,1)
,然后调用:
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 );
}
函数drawClockSlice(精灵:精灵,中心X:编号,中心Y:编号,端角:编号,半径:编号):无效
{
变量g:Graphics=sprite.Graphics;
var控制点:点;
var锚定点:点;
var startRadians:Number=Math.PI/180*-90;
var endRadians:Number=Math.PI/180*(endAngle-90);
变量差:数值=数学.abs(endRadians-startRadians);
风险值划分:数字=数学下限(差/(数学PI/4))+1;
变量范围:数值=差值/(2*个分段);
var controlRadius:Number=radius/Math.cos(span);
g、 移动到(centerX、centerY);
g、 lineTo(centerX+(数学cos(startRadians)*半径)、centerY+数学sin(startRadians)*半径);
对于(变量i:Number=0;i
(我从相关网站上获取并编辑了上述代码)
不要忘记您的
endFill()
步骤1:为您的形状创建遮罩精灵
步骤2:计算所需的角度:
var endAngle:Number = 360 / 12 * clockTime;
你的时间在哪里。使用360/60分钟
第3步:刷新输入帧上的掩码
您必须使用curveTo绘制饼图切片。使用maskSprite.graphics.clear()
和maskSprite.graphics.beginll(0,1)
,然后调用:
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 );
}
函数drawClockSlice(精灵:精灵,中心X:编号,中心Y:编号,端角:编号,半径:编号):无效
{
变量g:Graphics=sprite.Graphics;
var控制点:点;
var锚定点:点;
var startRadians:Number=Math.PI/180*-90;
var endRadians:Number=Math.PI/180*(endAngle-90);
变量差:数值=数学.abs(endRadians-startRadians);
风险值划分:数字=数学下限(差/(数学PI/4))+1;
变量范围:数值=差值/(2*个分段);
var controlRadius:Number=radius/Math.cos(span);
g、 移动到(centerX、centerY);
g、 lineTo(centerX+(数学cos(startRadians)*半径)、centerY+数学sin(startRadians)*半径);
对于(变量i:Number=0;i
(我从相关网站上获取并编辑了上述代码)
不要忘记您的endFill()