Класс AS3 / конструктор базового класса - PullRequest
2 голосов
/ 20 марта 2011

Продолжение моего предыдущего вопроса.

У меня на сцене есть кнопка с классом Game1 (я не определил этот класс, просто связал его, как Хуан ответил на другой мой вопрос). В качестве базового класса у кнопки есть «GameButton», который на данный момент содержит несколько простых операторов x, y.

Все мои кнопки будут иметь фиктивный класс GameX и базовый класс GameButton; таким образом они наследуются от базового класса, но могут иметь другой рисунок.

У меня есть основной класс, который содержит код для добавления этой кнопки:

public class MainAteam extends MovieClip
{
    public var btn1:Game1;

    public function MainAteam()
    {
        btn1 = new Game1();
        addChild(btn1);
        btn1.addEventListener(MouseEvent.CLICK, startGame1);
    }
    // startGame 1 function here
}

Теперь я хотел бы иметь возможность задавать значения x, y через параметры, чтобы я мог расположить каждую кнопку в отдельном месте. Однако, когда я пробую новую игру (5,5) и добавляю в конструктор GameObject следующее:

package 
{
 import flash.display.SimpleButton;

 public class GameButton extends SimpleButton
 {
    public function GameButton(startX:Number, startY:Number)
    {
        x = startX;
        y = startY;
    }
  }
}

Я получаю следующую ошибку:

1203: No default constructor found in base class GameButton

На самом деле я не знаю, как это исправить, поскольку я позволил Flash определить для меня классы GameX (я полагаю, они просто пусты) и использовать базовый класс для установки некоторых свойств. Если я просто поставлю x=5; y=5, он работает нормально. Большое спасибо.

1 Ответ

3 голосов
/ 21 марта 2011

Это одна из двух вещей, либо вам нужно вызвать super ();из вашего конструктора, или вы не реализовали необходимые свойства / методы класса при инициализации.Попробуйте расширить кнопку, а не SimpleButton, посмотрите, будет ли это работать лучше для вас.

РЕДАКТИРОВАТЬ Мой первый ответ был на правильном пути, но все же не так.Проблема в том, что вы создаете классы Game1, Game2 и т. Д., А не вызываете конструктор класса GameButton.Когда вы расширяете класс, имеющий аргументы конструктора REQUIRED, вы должны предоставить их с помощью super ();Таким образом, в этом случае внутри вашего конструктора класса Game1 вам нужно вызвать:

super(positionX, positionY);

ИЛИ

Вы можете изменить конструктор GameButton, чтобы иметь значения по умолчанию, например:

public function GameButton(var x:int = 0, var y:int = 0)

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

ТАКЖЕ

Также обратите внимание, что если вы создаете эти классы Game1, Game2 и т. Д. Из Flash IDE (в библиотеке), то выВам нужно будет пойти по пути добавления значений по умолчанию в конструктор GameButton, так как Flash автоматически генерирует классы для объектов библиотеки.В качестве альтернативы вы все равно можете создавать графику в предварительно скомпилированных клипах библиотеки, и вместо определения класса + базовый класс в настройках «Экспорт для Actionscript» создайте реальный класс Game1 / Game2 и т. Д. Вручную, как вы делали для GameButton, а затем в «Экспорт для».В поле Actionscript помещается полное имя класса.Вот так:

enter image description here

...