Февраль 2011
Руководство по actionscript. часть 7, стр. 031
If CgetPetStateC ) != VirtualPet. PETSTATEJULL) { setPetStateC Virtual Pet. PETSTATEJULL);
}
}
// Возвращает количество калорий в «желудке» животного public function getCalories ( ):int { return currentCalories;
}
// Возвращает количество с плавающей запятой, описывающее количество // пищи, оставшееся в «желудке» животного, в процентах public function getHunger ( ):Number { return currentCalories / VirtualPet. maxCalories;
}
// Деактивирует животное private function die ( ):void {
// Останавливаем жизненный цикл животного
stopC );
// Переводим животное в состояние «мертвый» setPetStateCVi rtualPet. PETSTATE_DEAD);
// Отображаем отладочное сообщение, информирующее о смерти животного
• trace(getName( ) + » has died.»);
}
// Уменьшает количество калорий животного в соответствии со скоростью // переваривания пищи этого животного. Этот метод вызывается // автоматически объектом digestTimer. private function digest ( ):void {
trace(getName( ) + » is digesting…»);
setCalories(getCalories( ) — VirtualPet. caloriesPerSecond);
}
// Присваивает целое число, представляющее текущее
// физическое состояние животного
private function setPetState (newState:int):void {
// Если состояние животного не изменилось, выходим из метода
if (newState == petState) { return;
}
// Присваиваем новое состояние petState = newState;
// Умедомляем приемники об изменении состояния животного dispatchEvent(new Event(Vi rtualPet. STATE_CHANGE));
}
// Возвращает целое число, представляющее текущее // физическое состояние животного public function getPetState ( ):int { return petState;
}
// Приемник события для объекта Timer, который управляет // процессом переваривания пищи
private function digestTimerListener (e:TimerEvent):void { // Перевариваем часть пищи digest( );
}
}
}
В листинге П. З представлен код для класса Food, который является суперклассом для различных видов пищи, поедаемой животным.
Руководство по actionscript. часть 7, стр. 032
Листинг П. З. Класс Food
package zoo {
// Класс Food является суперклассом для различных видов пищи, // поедаемой животными, public class Food {
// Хранит количество калорий, которым обладает данный кусок пищи
private var calories:int;
// Удобочитаемое название данного куска пищи
private var name.-String;
// Конструктор
public function Food (initialCalories:int) { // Сохраняем указанное первоначальное количество калорий setCal ori es(i ni ti alCalori es);
}
// Возвращает количество калорий, которым обладает данный кусок пищи public function getCalories ( ):int { return calories;
}
// Присваивает количество калорий, которым обладает данный кусок пищи public function setCalories (newCalories:int):void { calories = newCalories;
}
// Возвращает удобочитаемое название данного куска пищи public function getName ( ):String { return name;
}
// Присваивает удобочитаемое название данному куску пищи public function setName (newName:String):void { name = newName;
}
}
}
В листинге П.4 продемонстрирован код для класса Apple, который представляет конкретный вид пищи, принимаемой животным.
Руководство по actionscript. часть 7, стр. 033
Листинг П.4. Класс Apple
package zoo { // Класс Apple представляет один из видов пищи. // принимаемой животным public class Apple extends Food {
// Количество калорий в объекте Apple, если не указано другое
private static var DEFAULT_CALORIES:int = 100;
// Хранит информацию о том. является ли
// данный объект Apple червивым
private var wormlnApple:Boolean;
// Конструктор
public function Apple (initialCalories:int = 0) { // Если не было указано допустимое количество калорий… if (initialCalories <= 0) {
//…присваиваем данному объекту Apple количество калорий //по умолчанию initialCalories = Applе. DE FAULT_CALORIES;
}
// Случайным образом определяем, будет ли данный объект Apple червивым
// (50 % вероятность)
wormlnApple = Math. random( ) >= .5;
// Присваиваем название этому куску пищи setName(«Apple»);
}
// Возвращает значение типа Boolean, которое сообщает о том. является ли // данный объект Apple червивым public function hasWorm ( ):Boolean { return wormlnApple;
}
}
}
Наконец, в листинге П.5 продемонстрирован код для класса Sushi, который представляет конкретный вид пищи, принимаемой животным.
Руководство по actionscript. часть 7, стр. 034
Листинг П.5. Класс Sushi
package zoo {
// Класс Sushi представляет один из видов пищи, принимаемой животным public class Sushi extends Food {
// Количество калорий в объекте Sushi, если не указано другое
private static var DEFAULT_CALORIES:int = 500;
// Конструктор
public function Sushi (initialCalories:int = 0) { // Если ye было указано допустимое количество калорий… if (initialCalories <= 0) {
//…присваиваем данному объекту Sushi количество калорий по умолчанию initialCalories = Sushi. DEFAULT_CALORIES;
}
// Вызываем конструктор класса Food super(initialCalories);
// Присваиваем название этому куску пищи setNameCSushi»);
}
}
}
В листинге П.6 продемонстрирован код для класса VirtualPetNameException, который представляет исключение, генерируемое в тех случаях, когда указывается недопустимое имя животного.
Руководство по actionscript. часть 7, стр. 035
Листинг П.6. Класс VirtualPetNameException
package zoo {
// Класс VirtualPetNameException представляет исключение, генерируемое // в том случае, когда для животного указывается недопустимое имя public class VirtualPetNameException extends Error { // Конструктор
public function VirtualPetNameException (
message:String = «Invalid pet name specified.») { // Вызываем конструктор класса Error super(message);
}
}
}
В листинге П.7 показан код для класса VirtualPetExcessDataException, который представляет исключение, генерируемое в тех случаях, когда указывается слишком длинное имя животного.
Руководство по actionscript. часть 7, стр. 036
Листинг П.7. Класс VirtualPetExcessDataException
package zoo {
// Класс VirtualPetExcessDataException представляет исключение.
// генерируемое в том случае, когда для животного указывается слишком
// длинное имя
public class VirtualPetExcessDataException
extends VirtualPetNameException {
// Конструктор
public function VirtualPetExcessDataException ( ) { // Вызываем конструктор класса VirtualPetNameException superC’Pet name too long.»);
}
}
}
В листинге П.8 показан код для класса VirtualPetlnsufficientDataException, который представляет исключение, генерируемое в тех случаях, когда указывается слишком короткое имя животного.
Руководство по actionscript. часть 7, стр. 037
Листинг П.8. Класс Virtual PetlnsufficientDataException
package zoo {
// Класс VirtualPetlnsufficientDataException представляет исключение. // генерируемое в том случае, когда для животного указывается слишком // короткое имя
public class VirtualPetlnsufficientDataException
extends VirtualPetNameException {
// Конструктор
public function VirtualPetlnsufficientDataException ( ) { // Вызываем конструктор класса VirtualPetNameException superC’Pet name too short.»);
}
}
}
В листинге П.9 продемонстрирован код для класса VirtualPetView, обеспечивающего графическое представление экземпляра класса VirtualPet.
Руководство по actionscript. часть 7, стр. 038
Листинг П.9. Класс VirtualPetView
package zoo { import flash. display.*; import flash. events.*;
import flash. net.*: import flash. text.*:
// Класс VirtualPetView обеспечивает графическое представление экземпляра // класса VirtualPet. Изображения для животного загружаются на этапе // выполнения.
public class VirtualPetView extends Sprite { // Отображаемое животное private var pet:VirtualPet:
// Контейнер для изображений животного private var graphicsContainer:Sprite:
// Изображения и текст животного private var petAlive:Loader: private var petDead:Loader: private var foodHungry:Loader: private var foodStarving:Loader:
private var petName.-TextField;
// Животное в состоянии «живой»
// Животное в состоянии «мертвый»
// Значок для состояния «голодный»
// Значок для состояния «ужасно
// голодный»
// Отображает имя животного
// Пользовательский интерфейс животного
private var appleBtn:FoodButton; // Кнопка для кормления животного
// яблоком
private var sushiBtn:FoodButton; // Кнопка для кормления животного суши // Определение момента завершения загрузки
static private var numGraphicsToLoad:int = 4; // Общее количество
// изображений
private var numGraphicsLoaded:int = 0; // Количество изображений.
Руководство по actionscript. часть 7, стр. 039
// загруженных на настоящий // момент
// Конструктор
public function VirtualPetView (pet-.VirtualPet) { // Сохраняем ссылку на отображаемое животное this. pet = pet;
// Регистрируем приемник для получения уведомлений об изменениях // в имени животного
pet. addEventLi stener(Vi rtualPet. NAME_CHANGE.
petNameChangeListener); // Регистрируем приемник для получения уведомлений об изменениях // в состоянии животного pet. addEventLi stener(Vi rtualPet. STATE_CHANGE.
petStateChangeListener);
// Создаем и загружаем’изображения животного createGraphicsContainer( ); createNameTag( ); createUK );
loadGraphics( );
}
// Создает контейнер, в который будут помещены изображения животного private function createGraphicsContainer ( ):void {
graphicsContainer = new Sprite( );
addChi1d(graphi csContai ner);
}
// Создает объект TextField. в котором будет отображаться имя животного private function createNameTag ( ):void { petName = new TextField( );
petName. defaultTextFormat = new TextFormat(«_sans».14.0×006666.true);
petName. autoSize = TextFieldAutoSize. CENTER;
petName. selectable = false;
petName. x = 250;
petName. у = 20;
addChild(petName);
}
// Создает кнопки для пользователя, предназначенные
// для кормления животного
private function createUI ( ):void {
// Кнопка Feed Apple (Дать яблоко)
appleBtn = new FoodButton(«Feed Apple»);
appleBtn. y = 170;
appleBtn. addEventLi stener(MouseEvent. CLICK. appleBtnCli ck); addChild(appleBtn);
// Кнопка Feed Sushi (Дать суши) sushiBtn = new FoodButton(«Feed Sushi»); sushiBtn. y = 190;
sushi Btn. addEventLi stener(MouseEvent. CLICK. sushi BtnCli ck); addChild(sushiBtn);
}
// Блокирует пользовательский интерфейс private function disableUI ( ):void {
appleBtn. disableC );
sushiBtn. disableC );
}
// Загружает и размещает на экране внешние изображения для животного private function loadGraphics ( ):void { // Изображение, представляющее животное в состоянии «живой» petAlive = new Loader( ); petAli ve.1oad(new URLRequest(«pet-a1i ve. gi f»)); petAli ve. contentLoaderlnfo. addEventLi stener(Event. COMPLETE.
Руководство по actionscript. часть 7, стр. 040
CompleteListener); petAli ve. contentLoaderlnfo. addEventLi stener(IOErrorEvent. I0_ERR0R.
ioErrorListener);
// Изображение, представляющее животное в состоянии «мертвый»
petDead = new Loader( );
petDead.1oad(new URLRequest(«pet-dead. gif»));
petDead. contentLoaderlnfo. addEventLi stener(Event. COMPLETE.
completeListener); petDead. contentLoaderlnfo. addEventLi stener(IOErrorEvent. I0_ERR0R.