【问题标题】:operator overload in as3 workaroundsas3 变通方法中的运算符重载
【发布时间】:2011-03-14 19:47:02
【问题描述】:

我知道在 as3 中重载运算符是不可能的,并且一直在使用 get 和 set 功能(恕我直言),但是现在我正在创建一个颜色类。

我想要做的是一个颜色类,然后是 rgb、hsl、hsv 等子类型......我的问题是当我制作这些变量时,我该如何制作它,所以当我读取它们的值时它们会出现作为一个单位?

例如,我希望能够做到这一点。

var myRGBcolour:RGB = new RGB(14,21,42);
someSprite.graphics.beginFill(myRGBcolour);     //for those of you who don't know,
                                                //this function expects a uint

我怎样才能做到这一点? 我之前正在阅读有关 valueof 函数的内容,但据我所知,如果您说类似 myRGBcolour.valueOf() 的内容,则只能使用它,但这违背了整个目的,我不妨只创建一个 myRGBcolour.toUint() 函数。

提前致谢。

【问题讨论】:

  • 所以你想将你的类作为参数传递并让它自动成为一个 uint?另外请解释一下,创建和使用 toUint 函数有什么缺点?
  • 我同意 EyeSeeEm - 为什么调用颜色类的方法会破坏整个目的?
  • 抱歉我的问题不清楚,我只是认为可能有比使用 getter 函数更简洁的方法。我想虽然没有。谢谢大家的帮助。干杯

标签: actionscript-3


【解决方案1】:

您可以尝试覆盖 valueOf 并进行特定转换:

someSprite.graphics.beginFill(0+myRGBcolour); // 0+ is similar to 0x

或者如果您愿意:

someSprite.graphics.beginFill(myRGBcolour+0);

这个结构用在Fingers

【讨论】:

  • 漂亮!!谢谢@Kasztan
  • BTW:我写了一篇关于AS3中运算符重载的文章:filimanjaro.com/2012/…
  • 谢谢,但您似乎在接受“new O() + 0;”最后anwyays...大声笑
  • 不,如果您使用 +,则不需要 0。
【解决方案2】:

beginFill() 需要一个 uint,所以你必须给它一个。我认为拥有一个 toUint 方法听起来是最好的计划,或者拥有一个 get 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多