Actionscript 3 在AS3中使用绿石的粗花呢雪碧尺寸

Actionscript 3 在AS3中使用绿石的粗花呢雪碧尺寸,actionscript-3,flash,animation,tween,gsap,Actionscript 3,Flash,Animation,Tween,Gsap,我看到过一些例子,其中可以使用scaleX将矩形连接起来,但我找不到任何可以将圆连接起来的东西。(我画的“圆”实际上是一个油炸圈饼形状,我希望外面的圆是用粗花呢做的) 我试着这样做,但这会带来很多错误。我认为这样做是不可能的: TweenMax.to(myCircle, 2, {resizeVar:150, ease:SlowMo.ease.config(1, 0)}); 对于显示对象,通常是这样做的。不过,这种“甜甜圈”不起作用: 所以我的问题是,我怎样才能知道外圆的半径大小 编辑:这是甜甜

我看到过一些例子,其中可以使用
scaleX
将矩形连接起来,但我找不到任何可以将圆连接起来的东西。(我画的“圆”实际上是一个油炸圈饼形状,我希望外面的圆是用粗花呢做的)

我试着这样做,但这会带来很多错误。我认为这样做是不可能的:

TweenMax.to(myCircle, 2, {resizeVar:150, ease:SlowMo.ease.config(1, 0)});
对于显示对象,通常是这样做的。不过,这种“甜甜圈”不起作用:

所以我的问题是,我怎样才能知道外圆的半径大小

编辑:这是甜甜圈的绘制方式,因此resizeVar需要从75更改为150

var myCircle:Sprite = new Sprite();

myCircle.graphics.beginFill(0xbbbbbb);
myCircle.graphics.drawCircle(0, 0, 150); // this is what should be tweening/scaling
myCircle.graphics.drawCircle(0, 0, 75); // this should stay the same
myCircle.graphics.endFill();

addChild(myCircle);

它与矩形一起工作的原因是您正在更改矩形的比例。更改比例时,Flash Player会调整包含图形的显示对象的比例

但是,对于圆,您正在尝试更改圆的半径。半径仅在使用
drawCircle()
方法绘制圆时使用。半径之间的一种方法是使用二者多次重新绘制圆(不太理想)

要使用新半径重新绘制圆,可以使用
TweenMax
提供的回调函数:

TweenMax.to(myCircle, 2, {resizeVar:150, onUpdate: onUpdateCallback, onUpdateParams: [resizeVar] });

function onUpdateCallback(radius):void
{
    myCircle.graphics.drawCircle(myCircle.graphics.drawCircle((myCircle.width/2), (myCircle.height/2), radius);
}
[编辑]

注意,我添加了一些参数,您需要将这些参数传递给
onUpdate回调()
函数。我还修改了函数,添加了一个
radius
参数,然后在绘制圆时使用
radius

至于“试图改变这个甜甜圈的外圆”,这可能更复杂。你可能需要画两个圆环。在绘制圆之前,可能还需要调用
graphics.clear()


然而,也许@Marcela的答案更好,只需更改您已经绘制的对象的scaleX和scaleY即可。但是如果你需要达到一个指定的半径,唯一的方法就是在二者之间的每个间隔上重新画圆

您应该能够在任何displayObject的
scaleX
scaleY
属性之间切换:

var radius:Number = 75;
var myCircle:Sprite = new Sprite();
myCircle.graphics.beginFill(0);
myCircle.graphics.drawCircle(radius/2, radius/2, radius);
myCircle.graphics.endFill();
addChild(myCircle);

TweenMax.to(myCircle, 2, {scaleX:2, scaleY:2, ease:SlowMo.ease.config(1,0)});
编辑

这就是您将如何缩放甜甜圈的外部:

var resizeObject:Object = { innerRadius:75, outerRadius:150 };
myCircle = new Sprite();
myCircle.graphics.beginFill(0xbbbbbb);
myCircle.graphics.drawCircle(0, 0, resizeObject.outerRadius);
myCircle.graphics.drawCircle(0, 0, resizeObject.innerRadius);
myCircle.graphics.endFill();

addChild(myCircle);    
TweenMax.to(resizeObject, 2, {outerRadius:300, ease:SlowMo.ease.config(1,0), onUpdate:updateCircle, onUpdateParams:[resizeObject]});


function updateCircle(resizeObject:Object):void 
{
    myCircle.graphics.clear();
    myCircle.graphics.beginFill(0xbbbbbb);
    myCircle.graphics.drawCircle(0, 0, resizeObject.outerRadius);
    myCircle.graphics.drawCircle(0, 0, resizeObject.innerRadius);
    myCircle.graphics.endFill();
}

它抛出以下两个错误:
1067:将void类型的值隐式强制为不相关的类型号。
1136:参数数不正确。对于
onUpdate回调()函数中的行,应为3。
。因为我正在尝试改变这个“甜甜圈”的外圆,所以这行得通吗?看起来回调函数需要有3个参数,我展示的那个没有任何参数。我似乎无法在他们的文档中找到这些论点。但看起来您可以通过
onUpdateParams
告诉它要向函数发送哪些参数。编辑我的答案,看看是否有帮助……它仍然会出现相同的错误。:/也许我应该想一些其他的方法来编写代码,而不是把它做成油炸圈饼。我再次测试了它,它确实有效——但问题是它只对一个圆有效。我画了两个圆圈来做“甜甜圈”。当我尝试在
scaleX
scaleY
之间切换时,它会断开…你能展示一些代码来解释你是如何绘制这个甜甜圈的吗?我刚刚用你的代码测试了我的代码,它工作得很好。你有错误吗?如果是的话,请把它也贴出来。啊。。。!对不起,我说得不够简洁。用你的方法,整个甜甜圈都会变大——但我试图保持“内”圈不变,如果有意义的话,在“外”圈上变小/变粗。
var radius:Number = 75;
var myCircle:Sprite = new Sprite();
myCircle.graphics.beginFill(0);
myCircle.graphics.drawCircle(radius/2, radius/2, radius);
myCircle.graphics.endFill();
addChild(myCircle);

TweenMax.to(myCircle, 2, {scaleX:2, scaleY:2, ease:SlowMo.ease.config(1,0)});
var resizeObject:Object = { innerRadius:75, outerRadius:150 };
myCircle = new Sprite();
myCircle.graphics.beginFill(0xbbbbbb);
myCircle.graphics.drawCircle(0, 0, resizeObject.outerRadius);
myCircle.graphics.drawCircle(0, 0, resizeObject.innerRadius);
myCircle.graphics.endFill();

addChild(myCircle);    
TweenMax.to(resizeObject, 2, {outerRadius:300, ease:SlowMo.ease.config(1,0), onUpdate:updateCircle, onUpdateParams:[resizeObject]});


function updateCircle(resizeObject:Object):void 
{
    myCircle.graphics.clear();
    myCircle.graphics.beginFill(0xbbbbbb);
    myCircle.graphics.drawCircle(0, 0, resizeObject.outerRadius);
    myCircle.graphics.drawCircle(0, 0, resizeObject.innerRadius);
    myCircle.graphics.endFill();
}