as3: как организовать занятия - PullRequest
2 голосов
/ 13 марта 2012

Это немного основной вопрос. Но я не понимаю, как ее решить. У меня есть приложение, которое имеет несколько направлений. Например. щука <- рыба -> акула. Где рыба является базовым классом.

Я занимаюсь озером, поэтому все мои экземпляры класса рыб могут двигаться только в пределах некоторых границ. Более того, все они случайным образом создаются на одном из краев озера и плавают к другому в зависимости от края, на котором они расположены. Вот как выглядит базовый класс:

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?

Я думал, что подклассы из Fish были бы более естественным способом, но в этом случае я не понимаю, как переопределить визуальное представление рыбы (например, изображение), поскольку невозможно переопределить переменную.

С другой стороны, если я буду использовать FlxSprite в качестве базового класса, было бы легко переопределить презентацию, но в случае, если я не смогу повторно использовать код движения (например, чтобы рыба знала, в каком направлении плавать ) ...

Я понимаю, что вопрос немного сложен для понимания. Рад переопределить его в случае возникновения каких-либо вопросов.

1 Ответ

3 голосов
/ 13 марта 2012

Вы не можете переопределить переменную (это не имеет никакого смысла), но вы можете установить ее значение в конструкторе.

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

Я думаю, что переопределение геттеров и сеттеров - хороший вариант для вас. Затем вы можете изменить поведенческую скорость / размер для каждого вида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...