少し基本的な質問です。しかし、私はそれを解決する方法を理解していません。私はいくつかの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を基本クラスとして使用すると、プレゼンテーションを再定義するのは簡単ですが、移動コードを再利用することができない場合(例:魚がどの方向に泳ぐ)...
私は少し質問が分かりにくいと思います。何か質問があれば、それを再定義してください。
コディアックが正しいです。 Olegsの例では、画像フィールドは非常に具体的な属性(魚の視覚的表現)を表しているという根底にあるアイデアを追加したいと思います。そのクラスでは間違っています。あなたがそれを考えるならば、魚の抽象的な概念は具体的な表現をすることはできません。あなたが言うことができるのは、魚は一般的に視覚的な表現をしているということだけです。具体的なサブクラスでは、Kodiakが示唆するように、その具体的な表現を指定できます。 – ghost23
良い点!プレゼンテーションを抽象クラスから外します –
ここでは小さな質問です。同じサメの5種類のサイズを追加する必要がある場合(たとえば、それぞれのサイズが画像のサイズと異なる場合)、どうすればよいですか?この場合、5つのサブクラスを作成するのは少し奇妙ですか? –