2012-03-13 11 views
2

少し基本的な質問です。しかし、私はそれを解決する方法を理解していません。私はいくつかのentetiesを持っているアプリケーションを持っています。例えば。パイク< - 魚 - >サメ。魚が基本クラスであるところ。as3:クラスの編成方法

私はいくつかの種類の湖を行っています。したがって、私の魚クラスのすべてのインスタンスはいくつかのボーダー内でしか移動できません。さらに、それらはすべて、湖の端の1つでランダムに作成され、それらが位置しているエッジに応じて、別のものに泳ぎます。

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)sizeプロパティを定義します(たとえば、サイズに基づいて、サメが強いか、弱いだろう)

質問です:

は、どのように私は魚のサブクラスとして...サメを定義していますか?スプライトからサブクラス化する方が良いでしょうか?

私はFishからのサブクラス化がより自然な方法だと考えましたが、この場合、変数をオーバーライドすることは不可能であるため、Fishの視覚的な表示をオーバーライドする方法を理解していません。

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); 
} 

また、ゲッターを使用することができます。 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; 
} 

は私がオーバーライドゲッターとセッターがあなたのために良い選択肢だと思います。次に、各種の行動速度/サイズを変更することができます。

+1

コディアックが正しいです。 Olegsの例では、画像フィールドは非常に具体的な属性(魚の視覚的表現)を表しているという根底にあるアイデアを追加したいと思います。そのクラスでは間違っています。あなたがそれを考えるならば、魚の抽象的な概念は具体的な表現をすることはできません。あなたが言うことができるのは、魚は一般的に視覚的な表現をしているということだけです。具体的なサブクラスでは、Kodiakが示唆するように、その具体的な表現を指定できます。 – ghost23

+0

良い点!プレゼンテーションを抽象クラスから外します –

+0

ここでは小さな質問です。同じサメの5種類のサイズを追加する必要がある場合(たとえば、それぞれのサイズが画像のサイズと異なる場合)、どうすればよいですか?この場合、5つのサブクラスを作成するのは少し奇妙ですか? –

関連する問題