2012-03-13 97 views
2

這是一個基本的問題。但是,我不明白如何解決它。我有一個應用程序有幾個enteties。例如。派克< - 魚 - >鯊魚。魚類是基礎類。as3:如何組織班級

我正在做某種湖,所以我所有的魚類都只能在一些寄宿生中移動。更重要的是,它們都是隨機創建在湖的一個邊緣上,並根據它們所處的邊緣游到另一個邊緣。下面是它如何尋找基類:

public class Fish extends FlxSprite 
{ 

    [Embed(source="./resources/Elipse.png")] 
    public var image:Class; 

    // Variable which stores the direction of item movement (false - Move right) 
    // (true - Move Left) 
    private var movement:Boolean; 

    public function Fish(x:int, y:int) 
    { 
     super(x, y, image); 

     // Move right 
     if (x < 5) 
     { 
      movement = false; 
     } 
     else 
     { 
      movement = true; 
     } 
    } 



    public override function update():void 
    { 
     if(movement) 
     { 
      this.velocity.x -= 3; 
     } 

     else 
     { 
      this.velocity.x += 3; 
     } 

     super.update(); 
} 

現在我想擴展這個模型,以添加一些額外的行爲魚類。例如。我想做一個鯊魚。要做到這一點,我需要:

1)更換抽象魚的形象用鯊魚

2的圖像)更改位(鯊魚仍然需要知道方向,但可能使用其他方法來速度的行爲)

3)定義根據尺寸大小屬性(如鯊魚會更強或更弱)

的問題是:

如何定義鯊魚......魚的子類?或者從Sprite子類化它更好?我認爲從魚子類化將是更自然的方式,但在這種情況下,我不知道如何重寫魚的視覺呈現(如圖像),因爲它是不可能重寫一個變量。另一方面,如果我將FlxSprite用作基類,重新定義表示會很容易,但是在這種情況下,我將無法重用移動代碼(例如,所以魚知道在哪個方向上游泳)...

我知道這個問題有點難以理解。如有任何問題,很樂意重新定義它。

回答

3

你不能重寫一個變量(它沒有任何意義),但你可以在構造函數中設置它的值。

Fish

public var image:Class; 

Shark

[Embed(source="./resources/shark.png")] 
private const _sharkImage:Class; 

public function Shark(x:int, y:int) 
{ 
    image = _sharkImage; 
    super(x, y); 
} 

你也可以使用一個getter。

Fish

[Embed(source="./resources/Elipse.png")] 
public var _image:Class; 

public function get image():Class 
{ 
    return _image; 
} 

,然後在Shark

[Embed(source="./resources/shark.png")] 
private const _sharkImage:Class; 

override public function get image():Class 
{ 
    return _sharkImage; 
} 

我想重寫getter和setter是一個不錯的選擇。然後你可以改變每個物種的行爲速度/大小。

+1

科迪亞克是正確的。我想補充一點,其基本思想是,在Olegs的例子中,圖像字段代表了一個非常具體的屬性(魚的視覺表示)。它在這個班上錯位。如果你想到這一點,魚的抽象概念就不能有一個具體的表示,因爲如果你不知道魚是什麼樣子的話,它可能看起來像什麼樣的具體魚。唯一可以說的是,一條魚總體上具有視覺表現。在任何具體的子類中,就像科迪亞克建議的那樣,你可以指定具體的表示。 – ghost23 2012-03-13 11:49:07

+0

好點!我將把這個演示文稿移出抽象類 – 2012-03-13 12:29:21

+0

小問題在這裏。如果我需要添加5個不同大小的相同鯊魚(例如,他們每個人都有不同大小的圖像),我會怎麼做?在這種情況下創建5個子類有點奇怪嗎? – 2012-03-13 14:57:59