(кролики были слишком милыми, чтобы ответить на этот вопрос, так что вот так ...)
В вашем коде есть несколько проблемных областей, касающихся ООП. Я постараюсь объяснить их немного.
Имена пакетов:
Имена пакетов даны для уникальной идентификации класса. Рассмотрим ситуацию, когда вы используете стороннюю библиотеку, которая имеет класс StringUtils. У вас также есть класс StringUtils. Как вы храните их в своей рабочей папке? Как вы относитесь к каждому из них в своем коде?
Пакеты, как следует из названия, предоставляют механизм для группировки классов. Поэтому, когда вы ссылаетесь на свой класс, вы можете обратиться к нему как com.joemidi.utils.StringUtils
, а другой как com.someoneelse.utils.StringUtils
. Имена пакетов могут быть любыми, если они отражают структуру папок. Но в качестве отраслевого стандарта люди используют URL-адреса в именах своих пакетов, поскольку они гарантированно являются уникальными. Вот почему вы видите com
во многих пакетах. В вашей ситуации лучше, если вы реструктурируете свои пакеты (и структуры папок) в соответствии с этим.
Экземпляры сцены из IDE:
Когда вы создаете экземпляры в Flash IDE, вы должны помнить, где вы их помещаете и знает ли ваш код о них или нет. Кролики, как сказал @weltraumpirat, не являются внутри вашего startBtn. Правильный способ сделать то, что вы пытаетесь сделать, это:
Main:
+ contains the bunnies.
+ listens to startButton for MouseEvent.CLICK
+ when startButton is clicked, manipulates the bunnies.
Тем не менее, мы понимаем, что есть еще одна проблема:
Не полагайтесь на имена экземпляров:
Вы должны создавать (то есть создавать новые) кролики в своем коде, а не в Flash IDE; и получить к ним доступ из центральной переменной. Например:
public class Main extends MovieClip {
var bunnies:Array = new Array();
public function Main() {
createBunnies(7);
startButton.addEventListener(MouseEvent.CLICK, onStartClicked)
}
protected function createBunnies(bunnyCount:int):void {
for (var i:int = 0; i < bunnyCount; i++) {
var bunny:Bunny = new Bunny();
addChild(bunny);
// configure bunny.x, bunny.y, etc. here.
bunnies.push(bunny);
};
}
protected function onStartClicked(e:MouseEvent) {
for (var i:int = 0; i < bunnies.length; i++) {
var bunny:Bunny = bunnies[i];
bunnies.randomPlay();
};
}
Здесь вы больше не привязаны к именам экземпляров, которые вы дали кроликам. (Конечно, я просто предполагаю вашу сценическую структуру здесь.) И, таким образом, кролики более «независимы» от кода над ними. Кроме того, вы можете использовать спрайт-держатель и отследить кроликов оттуда, но это может быть немного продвинуто прямо сейчас.
Надеюсь, это может оказаться полезным для вас. Если вы серьезно относитесь к этой теме, вы можете прочитать больше об ООП, в частности о том, почему она необходима, и ключевые термины по этому вопросу: разделение, наследование, инкапсуляция и т. Д.