В ActionScript всегда, когда я объявляю класс для объекта, я использую одно и то же имя объекта для класса и функции, которую я хочу вызвать. Например, если объектом является Card, имена классов и функций также являются Card.
Но впервые в книге об университетском программировании игр AS я вижу объявленный класс, который не такой, как я сказал.
часть книги учит "как создать игру", и они объявляют два класса для игры. основной класс - это сопоставление карт и всего, что нам нужно для создания игры. а второй класс просто для того, чтобы переворачивать карты и просто для большей красоты. в первом мы создаем новый символ во втором кадре для вызова класса и его функции, и имена совпадают. поэтому, когда мы достигаем второго кадра, символ вызывает свой класс, а затем свою функцию. и один из экранных объектов в этом кадре - «Карта». и нам нужно, чтобы эти карты переворачивались, когда они переворачиваются, и мы не делаем это, создавая для них movieClip, мы просто делаем это, написав AS для карт. Вы можете увидеть ActionScript здесь:
Мой вопрос: какую функцию Flash выберет для воспроизведения, если имя функции не совпадает с именем объекта и класса? (здесь это "Карта")
package {
import flash.display.*;
import flash.events.*;
public dynamic class Card extends MovieClip {
private var flipStep:uint;
private var isFlipping:Boolean = false;
private var flipToFrame:uint;
// begin the flip, remember which frame to jump to
public function startFlip(flipToWhichFrame:uint) {
isFlipping = true;
flipStep = 10;
flipToFrame = flipToWhichFrame;
this.addEventListener(Event.ENTER_FRAME, flip);
}
// take 10 steps to flip
public function flip(event:Event) {
flipStep--; // next step
if (flipStep > 5) { // first half of flip
this.scaleX = .2*(flipStep-6);
} else { // second half of flip
this.scaleX = .2*(5-flipStep);
}
// when it is the middle of the flip, go to new frame
if (flipStep == 5) {
gotoAndStop(flipToFrame);
}
// at the end of the flip, stop the animation
if (flipStep == 0) {
this.removeEventListener(Event.ENTER_FRAME, flip);
}
}
}
}