2014-01-31 41 views
1

爲什麼我無法編譯這段小小的代碼?
我在課堂上壓倒x和y,所以這就是爲什麼我需要super.xActionScript-3中的Minusassign( - =)語法錯誤

public class SimpleSprite extends Sprite 
{ 
    override public function set x(value: Number): void 
    { 
     super.x -= 12; 
     //super.x = super.x - 12; 
    } 
} 

// or 
public class SimpleSprite2 extends Sprite 
{ 
    public function get xx(): Number 
    { 
     return super.x; 
    } 

    public function set xx(value: Number): void 
    { 
     super.x = value; 
    } 

    public function SimpleSprite2() 
    { 
     xx -= 12; 
     super.x -= 12; 
     // Error: Syntax error: expecting semicolon before minusassign. 
    } 
} 

我知道我可以寫super.x = super.x - 12;但即時通訊懶惰,​​我不想2外觀4名這些不一致時,我得到的語法錯誤擊中即時通訊也很習慣的快捷鍵與-=


看起來像我的IDE(FlashDevelop 4.2.3)對此負有責任。

+0

你重寫x在這個班上?如果沒有,你不能使用'x - = 12;'而不是? – 3vilguy

+0

@ 3vilguy是的。我添加了這個信息。 – Bitterblue

+0

之前沒有編輯過。 如果只是複製你的班級,我沒有錯誤。當然,你不會錯過這堂課其他部分的一些分號嗎? – 3vilguy

回答

0

你的行爲沒有語法錯誤。您的代碼在我的Flash Builder 4.7中正常工作。

但是,請記住,instance.x -= value;是短期的

instance.x = instance.x - value; 
//ie. 
instance.[set]x = instance.[get]x - value; 

我提到的,因爲你的頂部這段代碼:

override public function set x(value: Number): void 
{ 
    super.x -= 12; 
    //super.x = super.x - 12; 
} 

讓我覺得你正在試圖做一些有趣的事。你爲什麼在set函數中遞減?

如果你需要有一個子類一個單獨的x值,但不能改變界面(即你仍然希望用戶能夠說mySubClassInstance.x = 123.0;)做到這一點:

public class DerivedSprite extends Sprite 
{ 
    protected var derivedX:Number; 
    public override function get x():Number 
    { 
     super.x = derivedX; 
     return derivedX; 
    } 

    public override function set x(value:Number):void 
    { 
     super.x = value; 
     derivedX = value; 
    } 

    public function DerivedSprite() 
    { 
     super(); 
     derivedX = super.x; 
    } 
} 
+0

_「你爲什麼要在set函數中遞減?」_I過濾我的精靈的x和y屬性。以便他們留在特定的邊界。就像當你想保持0到360之間的角度值時,你可以加上或減去360。 – Bitterblue