В этом сценарии есть несколько способов сделать СУХОЙ (не повторяйте себя) с вашим кодом. Лучший способ - научиться пользоваться классами. Классы - это чертежи, предназначенные именно для этих сценариев.
Вот пример простого класса, который делает то, что вы хотите. В Flash / Animate перейдите к file , затем new , затем ' ActionScript 3.0 Class ' - присвойте ему имя Crop
.
В появившемся документе должен быть какой-то базовый шаблонный код. Все должно быть в упаковке. Пакет сообщает flash, где найти этот класс - поэтому в этом примере оставьте его как есть (просто package {
) и сохраните этот файл в той же папке, что и ваш .fla
. Все функции должны быть заключены в объявление класса, оно должно быть сгенерировано для вас на основе введенного вами имени (Crop
). Далее вы увидите одну функцию, имя которой совпадает с именем класса. Это называется конструктором, и эта функция запускается всякий раз, когда вы создаете новый экземпляр этого класса. Так как классы являются чертежами, вы создаете их экземпляры, которые являются объектами - эти объекты затем получают весь код, который вы помещаете в этот класс.
Итак, для начала, вы должны иметь это:
package {
public class Crop {
public function Crop() {
// constructor code
}
}
}
Давайте продолжим и введем ваш код. Подробности см. В комментариях к коду:
package {
//imports should go here
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
//lets make this class extend MovieClip - that means it will be a MovieClip in addition to everything else you add below
public class Crop extends MovieClip {
//instead of setInterval, use a timer - it's easier to manage and cleanup
//in class files, variables and functions have access modifiers, that's what the public and private words are about
//private means only this class can ever use the var/function
private var timer:Timer;
public function Crop() {
//initialize the timer - have it tick every 5 seconds, and repeat 4 times (to move you from frame 1 - 5)
timer = new Timer(5000, 4);
//listen for the TIMER event (which is the tick) and call the function 'grow' when the timer ticks
timer.addEventListener(TimerEvent.TIMER, grow);
}
//a function that starts the timer ticking
public function startGrowing():void {
timer.start();
}
//this function is called every timer tick.
private function grow(e:Event):void {
this.nextFrame(); //go to the next frame of your crop
}
}
}
Сохраните файл. Теперь, когда у вас есть этот класс, вам нужно присоединить его к вашим ресурсам библиотеки, чтобы они все получили эту функциональность.
На панели библиотеки для каждого объекта обрезки щелкните правой кнопкой мыши (или нажмите Ctrl + щелчок на Mac) и перейдите к properties
. В свойствах нажмите advanced
и присвойте ему уникальное имя класса (например, Strawberry
). Затем в поле базового класса введите Crop
(класс, который мы только что создали). Повторите для остальных.
Теперь на вашей временной шкале, когда вы хотите, чтобы урожай начал расти, вы можете сделать:
field1.startGrowing(); //assuming your instance `field1` is one of the crops that you assigned the base class `Crop` to
Надеюсь, это дает точку входа во власть классов. Вы можете добавить больше функциональности в этот, и он автоматически применяется ко всем культурам, к которым вы его прикрепили.