Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

2 Обоснование выбора СУБД



2 Обоснование выбора СУБД

 

С разрабатываемой системой должен иметь возможность работать один пользователь в определенный момент времени, поэтому выбрана локальная технология хранения и обработки информации.

Требования к системе управления базами данных не предусмотрены.

 


 

3 Обоснование выбора языка программирования

 

В качестве языка программирования выбран ActionScript 3.0, т.к. он является объектно-ориентированным, имеет обширный инструментарий для создания интерактивных компонентов.

ActionScript является языком программирования, используемым в средах выполнения Adobe® Flash® Player и Adobe® AIR™. Он обеспечивает интерактивность, обработку данных и многие другие возможности в содержимом Adobe Flash, Flex и AIR, а также в приложениях.

ActionScript выполняется виртуальной машиной ActionScript (AVM), которая является частью проигрывателя Flash Player и пакета AIR. Обычно код ActionScript компилируется в формате байт-кодов (разновидность языка программирования, записываемого и распознаваемого компьютерами) компилятором, таким, какой встроен в Adobe® Flash® CS4 Professional или Adobe® Flex™ Builder™, а также доступен в Adobe® Flex™ SDK. Байт-коды встраиваются в SWF-файлы, которые выполняются в проигрывателе Flash Player и AIR.

ActionScript 3.0 предлагает надежную модель программирования, знакомую разработчикам, имеющим базовые понятия об объектно-ориентированном программировании.

Новая виртуальная машина ActionScript, называемая AVM2, использует новый набор инструкций в байт-кодах и обеспечивает значительный прирост производительности.

Более современный программный код компилятора выполняет оптимизацию на более высоком уровне, чем предыдущие версии компилятора.

Расширенный и улучшенный интерфейс программирования приложений (API) с контролем объектов на нижнем уровне и подлинной объектно-ориентированной моделью.

Интерфейс программирования приложений XML создан на основе спецификации ECMAScript для XML (E4X) (ECMA-357 редакция 2). E4X является расширением языка ECMAScript, который добавляет XML в качестве поддерживаемого языком типа данных. Модель события на основе спецификации событий DOM уровня 3.

ActionScript 3.0 превосходит возможности создания сценариев предыдущих версий ActionScript. Специально разработан, чтобы облегчить создание сложных приложений с большим набором данных и объектно-ориентированным, многократно используемым программным кодом. Хотя ActionScript 3.0 не обязателен для содержимого, выполняемого в Adobe Flash Player, он открывает возможность повышения производительности, доступные только с AVM2, новой виртуальной машиной. Код ActionScript 3.0 может выполняться до десяти раз быстрее, чем код прежней версии ActionScript.



Более старая версия виртуальной машины ActionScript, AVM1, выполняет код ActionScript 1.0 и ActionScript 2.0. AVM1 поддерживается в Flash Player 9 и 10 для обратной совместимости с существующим и старым содержимым.

ActionScript 3.0 содержит механизмы для загрузки ресурсов и данных в приложение с последующей их обработкой. Эти механизмы интуитивно понятны и согласованы с различными прикладными программными интерфейсами. Новый класс Loader предлагает единый механизм для загрузки SWF-файлов и графических ресурсов, а также обеспечивает способ доступа к детальной информации о загруженном содержимом. Класс URLLoaderпредлагает отдельный механизм для загрузки текстовых и двоичных данных в управляемые данными приложения. Класс Socket предлагает средства для считывания и записи двоичных данных в серверные сокеты в любом формате.

Различные прикладные программные интерфейсы обеспечивают доступ к данным нижнего уровня, который раньше в ActionScript был невозможен. Для данных, которые были загружены, класс URLStream, реализуемый с помощью URLLoader, обеспечивает доступ к несжатым двоичным данным непосредственно в процессе загрузки. Класс ByteArray позволяет оптимизировать чтение, запись и работу с двоичными данными. Новый прикладной интерфейс программирования звука обеспечивает точное управление звуком с помощью классов SoundChannel и SoundMixer. Новые прикладные программные интерфейсы взаимодействуют с системами безопасности, предоставляя информацию о соответствующих привилегиях SWF-файла или загруженного содержимого, позволяя лучше обрабатывать ошибки в системе безопасности.

В ActionScript 3.0 входит пакет flash.text, содержащий все связанные с обработкой текста прикладные программные интерфейсы. Класс TextLineMetrics предлагает подробные метрики для строк текста в текстовом поле; он заменил метод TextFormat.getTextExtent(), использовавшийся в ActionScript 2.0. Класс TextField содержит ряд интересных новых методов низкого уровня, обеспечивающих специфическую информацию о строке текста или об отдельном символе в текстовом поле. В число этих методов входят: метод getCharBoundaries(), который возвращает прямоугольник, отражающий границы поля символа; метод getCharIndexAtPoint(), который возвращает индекс символа в указанной точке; а также метод getFirstCharInParagraph(), который возвращает индекс первого символа в параграфе. К методам работы на уровне строк относятся метод getLineLength(), возвращающий число символов в указанной строке текста, и метод getLineText(), который возвращает текст из указанной строки. Новый класс Font обеспечивает средства для управления встроенными шрифтами в SWF-файлах.

 


 

4 Обоснование выбора инструментальных возможностей программной реализации задачи

 

Adobe Flash (ранее Macromedia Flash), или просто Flash (/flæʃ/), по-русски часто пишут флеш или флэш) — мультимедийная платформа компании Adobe для создания веб-приложений или мультимедийных презентаций. Широко используется для создания рекламных баннеров, анимации, игр, а также воспроизведения на веб-страницах видео- и аудиозаписей.

Платформа включает в себя ряд средств разработки, прежде всего en:Adobe Flash Professional и Adobe Flash Builder (ранее Adobe Flex Builder); а также программу для воспроизведения flash-контента — Adobe Flash Player, хотя flash-контент умеют воспроизводить и многие плееры сторонних производителей. Например, SWF-файлы можно просматривать с помощью свободных плееров Gnash или swfdec, а FLV-файлы воспроизводятся через мультимедийный проигрыватель Quicktime, и различные проигрыватели в UNIX-подобных системах при наличии соответствующих плагинов.

Adobe Flash позволяет работать с векторной, растровой и с трёхмерной графикой используя при этом GPU, а также поддерживает двунаправленную потоковую трансляцию аудио и видео. Для КПК и других мобильных устройств выпущена специальная «облегчённая» версия платформы Flash Lite, функциональность которой ограничена в расчёте на возможности мобильных устройств и их операционных систем.

Стандартным расширением для скомпилированных flash-файлов (анимации, игр и интерактивных приложений) является.SWF (Shockwave Flash). Видеоролики в формате Flash представляют собой файлы с расширением FLV или F4V (при этом Flash в данном случае используется только как контейнер для видеозаписи). Расширение FLA соответствует формату рабочих файлов в среде разработки.

Flash-технологии, или, как их еще называют, технологии интерактивной веб-анимации, были разработаны компанией Macromedia и объединили в себе множество мощных технологических решений в области мультимедийного представления информации. Ориентация на векторную графику в качестве основного инструмента разработки flash-программ позволила реализовать все базовые элементы мультимедиа: движение, звук и интерактивность объектов. При этом размер получающихся программ минимален и результат их работы не зависит от разрешения экрана у пользователя - а это одни из основных требований, предъявляемых к интернет-проектам.

Интерфейс Adobe Flash удобен и гибок в обращении. Рабочая среда состоит из элементов, которые можно перемещать, группировать, добавлять и прятать. Основными элементами являются «Временная шкала», «Свойства», «Библиотека», «Панель правок», «Вывод» и «Инструменты». К ним также можно добавлять и другие элементы, которые можно найти во вкладке «Окно». Настроенную рабочую среду можно сохранять и переключать между другими, сохраненными ранее. Также в Adobe Flash имеются уже заранее подготовленные рабочие среды, которые можно выбрать во вкладке «Окно» ► «Рабочие среды».

Среди них:

1 Аниматор.

2 Классический.

3 Отладка.

4 Дизайнер.

5 Разработчик.

6 Основные элементы.

7 Маленький экран.

Начиная с Flash 9 появилась поддержка AS3.

Мною была выбрана данная среда программирования, потому что она позволяет работать с данными различного типа и различных форм представления. В основе анимации во Flash лежит векторный морфинг, то есть плавное «перетекание» одного ключевого кадра в другой. Это позволяет делать сложные мультипликационные сцены, задавая лишь несколько ключевых кадров.

5 Маркетинговое исследование

 

Рассмотрим готовые решения, способные заменить разрабатываемое программное обеспечение по теме «Разработать виртуальную лабораторию по разделу физики «Колебания и волны». Среди них можно отметить:

- Виртуальная лаборатория по физике для школьников 1.0 (автор Монахов Вадим);

- Виртуальная лаборатория «Физика» компании «ProTechTraining»;

- «1С:Физический конструктор».

 

5.1 Виртуальная лаборатория по физике для школьников 1.0 (автор Монахов Вадим)

 

Виртуальная лаборатория содержит набор программ по школьному курсу физики и предназначена для использования учителями на уроках физики, а также учащимися для выполнения заданий с использованием компьютеров на уроках и дома. Может быть использована при подготовке к ДПЮ.

Состав программы «Виртуальная лаборатория по физике для школьников»:

Раздел 1. Методы научного познания.

Определение цены деления прибора.

Взвешивание тел и определение их плотности.

Построение графиков по результатам эксперимента (всплытие пузырька).

Раздел 2. Механика.

График x(t) неравномерного движения.

Графики x(t), v(t), a(t) неравномерного движения.

Относительность движения.

Скорость, ускорение, коэффициент трения.

Законы сохранения энергии и импульса.

Полет тела, брошенного горизонтально.

Полет тела, брошенного под углом к горизонту.

Математический маятник. Виды трения.

Связанные маятники.

Раздел 3. Молекулярная физика и термодинамика.

Распределение Максвелла.

Понятие температуры. Теплопроводность.

Раздел 4. Электричество.

Потенциал. Эквипотенциальные линии. Пробный заряд.

Электрические заряды в металле и диэлектрике.

Цифровой осциллограф на основе звуковой карты компьютера.

Раздел 5. Квантовая и атомная физика.

Квантовая частица в потенциальной яме.

Раздел 6. Виртуальные лабораторные работы.

10 Класс:

Опытная проверка закона Гей-Люссака.

Измерение модуля упругости (модуля Юнга) резины.

Измерение ЭДС и внутреннего сопротивления источника тока.

Измерение удельного сопротивления проводника.

Изучение последовательного соединения проводников.

Изучение параллельного соединения проводников.

Определение заряда электрона.

11 Класс:

Изучение явления электромагнитной индукции.

Измерение показателя преломления стекла.

Изучение треков заряженных частиц.

Раздел 7. Самотестирование по школьному курсу физики.

Давление. Статика.

Кинематика.

Динамика.

Колебания и волны.

Работа и энергия.

Оптика.

Молекулярная физика и термодинамика.

Электричество и магнетизм.

Электрический ток.

Атомная и квантовая физика, СТО.

Раздел 8. Обработка результатов эксперимента.

Набор программ для построения графиков и обработки результатов эксперимента.

Лицензия на виртуальную лабораторию дается на учебное заведение с правом копирования на произвольное число компьютеров как в рамках данного учебного заведения, так и на личные компьютеры, используемые учащимися.

 

5.2 Виртуальная лаборатория «Физика» компании «ProTechTraining»

 

Перечень виртуальных лабораторных работ комплекса «Физика»

1 Движение тела по окружности под действием силы тяжести и упругости.

2 Измерение длины световой волны с помощью дифракционной решетки.

3 Измерение ускорения свободного падения.

4 Изучение зависимости показателя преломления воздуха от давления с помощью интерференционного рефрактометра.

5 Изучение закона Ома для полной цепи.

6 Изучение изменения энтропии.

7 Изучение колебаний пружинного маятника.

8 Изучение колебательного движения математического маятника.

9 Изучение свободных затухающих колебаний физического маятника.

10 Исследование смешанного соединения проводников.

11 Наблюдение действия магнитного поля на ток.

12 Наблюдение фазовых переходов «жидкость-газ» и определение критической температуры Фреона-13.

13 Наблюдение явления электромагнитной индукции.

14 Определение концентрации раствора при помощи сахариметра.

15 Определение модуля упругости резины.

16 Определение скорости полета пули с помощью баллистического маятника.

17 Проверка закона сохранения энергии при действии сил тяжести и упругости.

18 Распределение Максвелла.

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

Различные технологии по-разному позволяют формировать профессиональные навыки и умения, интуицию и творческие способности.

Последние исследования Haskett consulting inc. (HCI): «Люди запоминают 20 % того, что они видят, 40 % того, что они видят и слышат и 70 % того, что они видят, слышат и делают». Похожие данные были получены в других российских и зарубежных источниках.

Процент запоминания:

- если читают (текст) - 10-30%;

- если видят (графика) - 20-40%;

- если слышат и видят (мультимедиа) - 30-50%;

- если говорят и пишут (интерактивные) - 50-75%;

- если делают (компьютерные имитаторы) - 65-95%.

Исходя из этого, можно сделать вывод о том, что наибольшая эффективность реализуется по средствам технологии формирования виртуальной реальности, так как достигается «перекрытие» большого количества каналов восприятия человека (зрение, слух, кинестетика).

Виртуальные лабораторные работы имеют встроенную поддержку наиболее прогрессивных технологий, включая виртуальную реальность (объемная визуализация, объемный звук, трекеры, шлемы виртуальной реальности, виртуальные перчатки).

Использование передовых технологий в области визуализации, взаимодействия с пользователем и формирования виртуальной реальности определяют лидирующее положение виртуальных лабораторных работ среди прочих электронных образовательных ресурсов.

Глобальный консорциум IMS занимается разработкой и внедрением открытых спецификаций для поддержки различных процессов в информационных образовательных технологиях. Спецификации широко поддержаны производителями. Используется в проектах EASEL и TRIAL-SOLUTIONS.

Применение ряда международных стандартов (SCORM, IMS CP), касающихся предоставления электронного образовательного контента, позволяет встраивать созданные компьютерные тренажеры в системы организации учебного процесса, использующие эти стандарты. Также это гарантирует востребованность и возможность успешного внедрения созданных тренажеров в ближайшем будущем. А применение кроссплатформенных решений позволяет использовать создаваемые компьютерные тренажеры на различных аппаратных платформах и операционных системах (MS Windows, Linux, MAC OS и т.д.).

Возможна поставка комплексов виртуальных лабораторных работ в формате SCORM-пакета для систем управления обучением (LMS), что позволит использовать виртуальные лабораторные работы при дистанционной технологии обучения, использую практически все известные LMS, например Moodle и мн.др.

Виртуальные лабораторные работы могут быть выполнены в системе Linux. На сегодняшний день поддерживаются следующие дистрибутивы Linux: Ubuntu, Kubuntu, Edubuntu, Mandriva, Debian

Все виртуальные лабораторные работы имеют встроенное учебно-методическое пособие по выполнению лабораторных работ, включая необходимые формулы для расчетов и т.д., а также перечень контрольных вопросов для защиты лабораторных работ студентами.

 

5.3 «1С:Физический конструктор 2.0»

 

«1С:Физический конструктор» – творческая компьютерная среда, предназначенная для поддержки школьного курса физики при помощи виртуальных экспериментов. Программа позволяет создавать интерактивные модели физических явлений и исследовать их в школе, дома, на факультативных занятиях, в сети Интернет.

«1С:Физический конструктор 2.0» охватывает следующие разделы физики:

1 Кинематика.

2 Динамика.

3 Законы сохранения.

4 Колебания и волны.

5 Основы молекулярно-кинетической теории.

6 Основы электростатики.

Инструментарий «1С:Физического конструктора 2.0» позволяет:

1 Строить системы тел и связей.

2 Производить динамический расчет взаимодействий.

3 Проводить измерения и вычисления.

4 Строить графики измеряемых величин и функций.

5 Строить графики по таблицам значений с погрешностями.

6 Использовать текстовый редактор с вводом формул.

7 Гибко настраивать состав панелей инструментов в моделях.

Динамический наглядный механизм «Физического конструктора» обеспечивает младшим школьникам возможность творческой манипуляции с объектами, а ученикам старшей школы – полнофункциональную среду для конструирования и решения задач.

Для ученика: коллекция интерактивных моделей; самостоятельное исследование и эксперимент.

Для учителя: организация проектной деятельности учащихся; создание обучающих материалов и контрольных работ; коллекция интерактивных моделей.

К данному изданию «1С:Физического конструктора» прилагается «Коллекция моделей», содержащая 55 учебных экспериментов с интерактивными заданиями и демонстрациями. Коллекцию дополняют развернутые методические указания по использованию моделей в учебном процессе.

Программная среда «1С:Физический конструктор»:

- может использоваться как дома, так и в школе при различных формах проведения занятий и при различной компьютерной оснащенности учебного класса;

- позволяет быстрее и эффективнее освоить школьный курс по физике, повышает запоминаемость материала;

- обеспечивает возможность изучения математики на основе деятельностного подхода за счет внедрения элементов эксперимента и исследования в учебный процесс;

- повышает степень эмоциональной вовлеченности учащихся в занятия, обеспечивает возможность постановки творческих задач и организации проектной работы;

- демонстрирует, насколько эффективно могут использоваться современные технологии для моделирования и визуализации физических явлений.

После короткого ознакомления с программой учителя и ученики способны успешно использовать «1С:Физический конструктор» на уроках и дома, что проверено на практике в ходе апробаций в школах.

Программная среда «1С:Физический конструктор»:

- позволяет работать на компьютерах под управлением операционных систем MS Windows, Linux, Mac OS;

- обеспечивает экспорт создаваемых учебных моделей в виде интернет-совместимых java-апплетов, независимых от программы-редактора, но позволяющих использовать все возможности конструктивной среды;

- поддерживает спецификацию SCORM RTE для интеграции с системами управления учебным процессом (LMS).

 

 

5.4 Оценка целесообразности разработки нового программного продукта

 

Сведём полученные результаты в итоговую таблицу 1 для принятия решения о целесообразности разработки нового программного продукта.

 

Таблица 1 – Сводные данные маркетингового исследования

Наименование ПО

Процент соответствия поставленной задаче

Стоимость, грн.

Программный продукт 1: Виртуальная лаборатория по физике для школьников 1.0 (автор Монахов Вадим)

50 %

10500,00

Программный продукт 2: Виртуальная лаборатория «Физика» компании «ProTechTraining»

50 %

88200,00 за право установки на 10 компьютеров

Программный продукт 3: «1С:Физический конструктор 2.0»

100 %

3260,00 за право установки на 15 компьютеров, 5800 – дополнительная лицензия на образовательное учреждение

Разрабатываемый программный продукт (Виртуальная лаборатория по разделу физики «Колебания и волны»)

100 %

 

 

Программные продукты 1 [Виртуальная лаборатория по физике для школьников 1.0 (автор Монахов Вадим)] и 2 [Виртуальная лаборатория «Физика» компании «ProTechTraining»] не полностью соответствуют требованиям поставленной задачи и стоят дорого, при этом автоматизируют много процессов, которые не будут использоваться при выполнении лабораторных работ по разделу физики «Колебания и волны».

Программный продукт 3: [«1С:Физический конструктор 2.0»] полностью удовлетворяет поставленной задаче, но стоит достаточно дорого, и также автоматизируют много процессов, которые не будут использоваться при выполнении лабораторных работ по разделу физики «Колебания и волны».

В результате проведённого исследования можно заключить, что разработка нового программного обеспечения целесообразна. Для полноты исследования необходимо провести оценку экономической эффективности.

 

 


 

6 Реализация классов

 

На рисунке 1 представлена диаграмма классов разрабатываемой информационной системы.

 

 

Рисунок 5 – Диаграмма классов

 

Мною были реализованы следующие 2 класса – Book, BookExample.

 

Класс Book

package gadgets.book

{

import flash.display.*;

import flash.events.*;

import flash.filters.*;

import flash.geom.*;

import flash.text.*;

 

/**

* генерируется, когда страница перевернута и прибыла на место

* @eventType book.events.BookEvent

*/

[Event(name = "flip", type = "silin.book.events.BookEvent")]

 

/**

* генерируется при смене страницы(разворота)

* @eventType book.events.BookEvent

*/

[Event(name = "changePage", type = "silin.book.events.BookEvent")]

 

/**

* имитация листания страниц <br/>

* листается только за нижнию часть страниц<br/>

*/

public class Book extends Sprite

{

/**

* режим переворачивания сразу на заданную страницу

*/

public static const JUMP:String = "jump";

/**

* режим постраничного переворачивания до заданной страницы

*/

public static const LEAF:String = "leaf";

 

/**

* режим переворачивания: <br/>

* LEAF-перелистывание по одной;<br/>

* JUMP-сразу пачкой.

*/

public var mode:String = JUMP;

/**

* класс диплейОбжекта для прелоадера контента страниц

*/

public var preloaderIcon:Class;

/**

* класс диплейОбжекта для для отображения облома загрузки

*/

public var errorIcon:Class;

//приваты сеттеров

private var _paper:BitmapData;

private var _wheelLeaf:Boolean = true;

private var _mouseLeaf:Boolean = true;

private var _contentLeaf:Boolean = false;

private var _turnSpeed:Number = 6;

 

private var _leftPage:PageTemplet = new PageTemplet();

private var _rightPage:PageTemplet = new PageTemplet();

private var _backSide:PageTemplet = new PageTemplet();

private var _nextSide:PageTemplet = new PageTemplet();

private var _backMask:PageMask=new PageMask();

private var _nextMask:PageMask=new PageMask();

private var _rightMask:PageMask = new PageMask();

 

private var _shadow:Shape=new Shape();

 

private var _pageW:Number;

private var _pageH:Number;

private var _pageD:Number;

private var _bookW:Number;

 

private var _targetPoint:Point = new Point();

private var _cornerPoint:Point = new Point();

private var _autoPoint:Point = new Point();

private var _bottomPoint:Point = new Point();

private var _mouseDownPoint:Point;

private var _pagePoints:Array;

private var _flipTarget:int = -1;//-1 нет вертелки

 

private var _dir:Boolean;

private var _drag:Boolean=false;

private var _changed:Boolean = false;//страница сменилась во время манипуляций

 

static private const SHADOW:DropShadowFilter = new DropShadowFilter(3, 140, 0x666666, 0.3, 16, 16);

static private const GLOW:GlowFilter = new GlowFilter(0x666666, 0.5, 5, 5, 2, 3);

static private const BLUR:BlurFilter = new BlurFilter(16, 16);

 

private var _currentPage:int=-1;

private var _dataProvider:Array/*PageContent*/=[];

 

private var _queueArr:Array;

 

/**

* constructor

*/

public function Book(width:Number=0, height:Number=0)

{

_leftPage.filters = [GLOW];

_rightPage.mask = _rightMask;

_rightPage.filters = [GLOW];

_nextSide.mask = _nextMask;

_backSide.mask = _backMask;

_backSide.filters = [SHADOW];

_shadow.filters = [BLUR];

 

addChild(_leftPage);

addChild(_rightPage);

addChild(_shadow);

addChild(_nextSide);

addChild(_backSide);

addChild(_rightMask);

addChild(_nextMask);

addChild(_backMask);

 

if (width && height)

{

setSize(width, height);

}

 

addEventListener(Event.ADDED_TO_STAGE, onStage);

}

 

/**

* установка размеров

* @param pageWidth

* @param pageHeight

*/

public function setSize(pageWidth:Number, pageHeight:Number):void

{

_pageW = pageWidth;

_pageH = pageHeight;

_pageD = Math.sqrt(_pageW * _pageW + _pageH * _pageH);

_bookW = 2 * _pageW;

 

_rightPage.x = _pageW;

_nextSide.x = _pageW;

 

_targetPoint = new Point(_bookW, _pageH);

_cornerPoint = new Point(_bookW, _pageH);

_autoPoint = null;

 

_leftPage.y = _pageH;

_rightPage.y = _pageH;

_backSide.y = _pageH;

_nextSide.y = _pageH;

 

_rightPage.setSize(_pageW, _pageH);

_leftPage.setSize(_pageW, _pageH);

_backSide.setSize(_pageW, _pageH);

_nextSide.setSize(_pageW, _pageH);

 

}

/**

* добавляет страницу(экземпляр PageContent) в конец

* @param data

*/

public function addPage(data:PageContent):void

{

_dataProvider.push(data);

startRender();

 

//добавляем индекс в очередь загрузки

_queueArr.push(_dataProvider.length - 1);

//если очередь была пуста (загрузка закончилась уже), то стартуем загрузку

if (_queueArr.length == 1)

{

loadCurrent();

}

}

/**

* переход на страницу num

* @param num

*/

public function gotoPage(num:int):void

{

mode == JUMP? jumpToPage(num): leafToPage(num);

}

 

/**

* переход на следующую

*/

public function nextPage():void

{

jumpToPage(currentPage + 2);

}

 

/**

* переход на предыдущую

*/

public function prevPage():void

{

jumpToPage(currentPage-2);

}

 

/**

* переход последнюю страницу

*/

public function lastPage():void

{

gotoPage(length - 1);

}

 

/**

* переход на первую страницу

*/

public function firstPage():void

{

gotoPage(0);

}

 

//инициализация листенеров при добавлении на сцену

private function onStage(e:Event):void

{

removeEventListener(Event.ADDED_TO_STAGE, onStage);

if(_wheelLeaf) addEventListener(MouseEvent.MOUSE_WHEEL, omMouseWheel);

if(_mouseLeaf) addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);

stage.addEventListener(MouseEvent.MOUSE_UP, onStageMouseUp);

 

}

//глобальный MouseUp

private function onStageMouseUp(e:MouseEvent):void

{

 

removeEventListener(MouseEvent.MOUSE_MOVE, onMouseDrag);

var rightSide:Boolean = (mouseX > _pageW);

 

if (!_drag) return;//если отпускаем не по делу

_drag = false;

_targetPoint = new Point(rightSide? 2 * _pageW: 0, _pageH);

 

// меняем разворот, если отпустили на другой стороне

if (_dir!= rightSide) {

_currentPage += rightSide? -2: 2;

dispatchEvent(new BookEvent(BookEvent.CHANGE_PAGE, _currentPage));

_changed = true;

 

}else {

_dir =!_dir;

}

}

 

//обработчик колеса мыши

private function omMouseWheel(evnt:MouseEvent):void

{

evnt.delta < 0? nextPage(): prevPage();

}

 

//локальный MouseDown самой книги

private function onMouseDown(e:MouseEvent):void

{

//ситуация: не ворочаем за кконтент и клик приходится на кого-то из детей

if (!_contentLeaf && e.target!= this) return;

 

//стартуем переворачивание только если потянули, а иначе пусть будет клик или что там еще надо

addEventListener(MouseEvent.MOUSE_MOVE, onMouseDrag);

}

 

//обработчик движения мыши в нажатом состоянии

private function onMouseDrag(evnt:MouseEvent):void

{

removeEventListener(MouseEvent.MOUSE_MOVE, onMouseDrag);

_dir = mouseX > _pageW;

 

//некуда крутить

if (_dir && currentPage > length - 3 ||!_dir && currentPage == 0) return;

 

_flipTarget = -1;

_drag=true;

_targetPoint=new Point(_dir? 0: _bookW, _pageH);

_cornerPoint = new Point(_dir? _bookW: 0, _pageH);

 

//расставляем контент

if (_dir)

{

setContent(currentPage+3, currentPage+2, currentPage, currentPage+1);

}else{

setContent(currentPage+1, currentPage, currentPage-2, currentPage-1);

}

startRender();// _needRender = true;

render();

}

 

//расставляет битмапы по местам

private function setContent(next:int, back:int, left:int, right:int):void

{

if (next > length-1) next = -1;

if (back > length-1) back = -1;

if (left > length-1) left = -1;

if (right > length-1) right = -1;

 

_nextSide.setContent(next);

_backSide.setContent(back);

_leftPage.setContent(left);

_rightPage.setContent(right);

 

}

 

//переворот на заданную

private function jumpToPage(page:int):void

{

if (running) return; //игнор во время переворота

var dn:int = page - (page % 2) - currentPage;//на сколько вертеть (с учетом нечета)

var valid:Boolean = dn!= 0 && page >= 0 && page < length;

if (!valid) return;//не надо ничего

_dir = dn > 0;

_autoPoint = new Point(0.25 * _pageW, _pageH / 2);

_cornerPoint = new Point(_dir? 2 * _pageW:0, _pageH);

_targetPoint = new Point(_dir? 0: 2 * _pageW, _pageH);

var oldPage:int = currentPage;

currentPage += dn;

if (_dir)

{

setContent(currentPage + 1, currentPage, oldPage, oldPage + 1);

}else{

 

setContent(oldPage + 1, oldPage, currentPage, currentPage + 1);

}

dispatchEvent(new BookEvent(BookEvent.CHANGE_PAGE, _currentPage));

_changed = true;

startRender();// _needRender = true;

_flipTarget = -1;//прекращаем последовательное перелистывание

 

}

 

// старт перелистывания

private function leafToPage(page:int):void

{

_flipTarget = 2 * Math.floor(page / 2);// совместимость с currentPage

nextFlip();

 

}

//следующий шаг, если включена листалка

private function nextFlip():void

{

if (_flipTarget == currentPage)

{

_flipTarget = -1;

return;

}

 

var tmpTarget:int = _flipTarget;//jumpToPage обнуляет _flipTarget, а здесь этого не надо

currentPage > _flipTarget? prevPage(): nextPage();

_flipTarget = tmpTarget;

 

}

 

private function startRender():void

{

addEventListener(Event.ENTER_FRAME, render);

}

 

private function stopRender():void

{

removeEventListener(Event.ENTER_FRAME, render);

}

 

private function render(e:Event=null):void

{

var mtrx:Matrix;

var gr:Graphics;

if(_drag) {

_targetPoint = _autoPoint || new Point(Math.max(0, Math.min(mouseX, _bookW - 8)), mouseY);

}

var pos:Number = _cornerPoint.x / _bookW;

var easy:Number = 1 + (_dir? 1.25 * pos: 1 - pos) * _turnSpeed;

if(_autoPoint){

_autoPoint.x += (_targetPoint.x - _autoPoint.x) / easy;

_autoPoint.y += (_targetPoint.y - _autoPoint.y) / easy;

}

var targ:Point = _autoPoint || _targetPoint;

_cornerPoint.x += (targ.x - _cornerPoint.x) / easy;

_cornerPoint.y += (targ.y - _cornerPoint.y) / easy;

 

_bottomPoint = new Point(Math.max((_bookW + _cornerPoint.x)/2,_pageW),_pageH);// нельзя оторвать нижний переплет

////центральный угол

setDist(_cornerPoint, _bottomPoint, _bookW - _bottomPoint.x);//не дальше ширины..

setDist(_cornerPoint, new Point(_pageW, 0), _pageD);//не дальще диагонали от верхнего переплета

//разворачиваем-ставим

_backSide.rotation = Math.max(-40, 180 / Math.PI * angle(_bottomPoint, _cornerPoint));

_backSide.x = _cornerPoint.x;

_backSide.y = _cornerPoint.y;

var dPoint:Point = _backSide.pointToParent(new Point(_pageW, -_pageH));

 

var corrX:Number = _pageW - dPoint.x;

if(corrX>0){

_backSide.x = _cornerPoint.x += corrX;

_backSide.y = _cornerPoint.y -= dPoint.y;

_bottomPoint.x += corrX;

}

 

_pagePoints = [new Point(0, 0), new Point(0, -_pageH), new Point(_pageW, -_pageH), new Point(_pageW, 0)];

for (var i:int = 0; i < 4; i++)

{

_pagePoints[i] = _backSide.pointToParent(_pagePoints[i]);

}

 

var xR:Point = getRightCross();

var xT:Point = getTopCross();

 

//nextPage mask

var nextMaskArr:Array = [_bottomPoint, new Point(_bookW, _pageH)];

if(xR){

nextMaskArr.push(xR);

}else{

nextMaskArr.push(new Point(_bookW, 0));

nextMaskArr.push(xT);

}

_nextMask.drawPoly(nextMaskArr);

 

//_backSide mask

var backMaskArr:Array = [_cornerPoint, _bottomPoint];

if(xR){

backMaskArr.push(xR);

}else{

backMaskArr.push(xT);

backMaskArr.push(_pagePoints[1]);

}

_backMask.drawPoly(backMaskArr);

 

//_rightPage mask

var backCover:Boolean = _backSide.page == length - 1;

 

var rightMaskArr:Array = [new Point(_pageW, 0), new Point(_pageW, _pageH)];

if (backCover)

{

rightMaskArr.push(_bottomPoint);

if (xR) rightMaskArr.push(xR,new Point(_bookW, 0));

rightMaskArr.push(xT);

 

}else

{

rightMaskArr.push(new Point(_bookW, _pageH), new Point(_bookW, 0));

}

_rightMask.drawPoly(rightMaskArr);

var kAdabt:Number = _cornerPoint.x < _pageW? _cornerPoint.x / _pageW: 1;

 

var sw:Number = Point.distance(_cornerPoint, _bottomPoint);

var sw1:Number = xR? 0: Point.distance(xT, _pagePoints[1]);

sw *= kAdabt;

sw1 *= kAdabt;

var sh:Number = Point.distance(_bottomPoint, xR || xT);

 

_shadow.rotation = 270 + 180 / Math.PI * angle(_bottomPoint, xR || xT);

 

var fi:Number = -Math.PI / 180 * _shadow.rotation;

 

mtrx= new Matrix();

mtrx.createGradientBox(sw, sh, fi, 0, 0);

 

gr = _shadow.graphics;

gr.clear();

gr.beginGradientFill(GradientType.LINEAR, [0, 0], [0.1, 0], [0x00, 0xCC], mtrx);

gr.lineTo(sw, 0);

gr.lineTo(sw1, -sh);

gr.lineTo(0, -sh);

gr.lineTo(0, 0);

gr.endFill();

_shadow.x = _bottomPoint.x;

_shadow.y = _bottomPoint.y;

 

var maxAlpha:Number=_cornerPoint.x/_pageW;//макс. альфа

var tp:Point=backMaskArr[3]||backMaskArr[2];

fi= Math.atan2(backMaskArr[2].x+tp.x-_bottomPoint.x-_cornerPoint.x,backMaskArr[2].y+tp.y-_bottomPoint.y-_cornerPoint.y);

sw=Math.max(Point.distance(_bottomPoint,_cornerPoint),Point.distance(_pagePoints[1],xT))+10;

sh = _pageH;

gr = _backSide.shade.graphics;

gr.clear();

mtrx = new Matrix();

mtrx.createGradientBox(sw, sh, fi, 0, 0);

gr.beginGradientFill(GradientType.LINEAR, [0, 0xFFFFFF, 0], [0.05, 0.25 * kAdabt, 0.05], [0, 0x66, 0xff], mtrx);

gr.moveTo(-5, 0);

gr.lineTo(sw, 0);

gr.lineTo(sw, sh);

gr.lineTo(-5, sh);

gr.lineTo(-5, 0);

gr.endFill();

gr.endFill();

if (!_drag && Point.distance(_cornerPoint, _targetPoint) < 1 && _shadow.rotation >= 0)

{

currentPage = _currentPage;

_autoPoint = null;

_shadow.graphics.clear();

if (_changed) {

dispatchEvent(new BookEvent(BookEvent.FLIP, currentPage));

_changed = false;

 

}

if (_flipTarget >= 0) //если включена последовательная листалка, запускаем следующий переворот

{

nextFlip();

_backMask.clear();

_nextMask.clear();

render();

 

}else//или останавливаем все

{

setContent(-1, -1, _currentPage, _currentPage + 1);

stopRender();

}

 

}

}

//пересечение с верхней кромкой

private function getTopCross():Point

{

var p3:Point = _pagePoints[1];

var p4:Point = _pagePoints[2];

var x:Number;

if(Math.abs(p4.y-p3.y)<30) {

x = _bottomPoint.x + (_pagePoints[1].x - _pagePoints[0].x) / 2;

}else{

var b:Number = (p4.y - p3.y) / (p4.x - p3.x);

var a:Number = p3.y - b * p3.x;

x = -a / b;

}

if(x<_pageW)x=_pageW;

return new Point(x,0);

}

 

//пересечение с правой кромкой

private function getRightCross():Point

{

var p3:Point = _pagePoints[0];

var p4:Point = _pagePoints[1];

if (p4.x == p3.x) return p4.x == 2 * _pageW? new Point(_bookW, 0): null;

var b:Number = (p4.y - p3.y) / (p4.x - p3.x);

var p:Point = new Point(2 * _pageW, p3.y + b * (2 * _pageW - p3.x));

if (p.y<0 || p.y>_pageH) return null;

return p;

}

 

//создает очередь загрузки и запускает, если есть чего

private function createQueue():void

{

_queueArr = [];

var data:PageContent;

for (var i:int = 0; i < _dataProvider.length; i++)

{

data = _dataProvider[i];

//если есть урл, пихаем в очередь

if (data && data.url)_queueArr.push(i);

}

if (_queueArr.length)

{

_queueArr.sort(sortFunction);

loadCurrent();

}

 

 

}

//грузит первую из очереди

private function loadCurrent():void

{

var content:PageContent = _dataProvider[_queueArr.shift()];

content.addEventListener(Event.COMPLETE, shiftQueue);

content.addEventListener(IOErrorEvent.IO_ERROR, shiftQueue);

content.load();

}

 

//обработчик зпгрузки/ошибки

private function shiftQueue(evnt:Event):void

{

evnt.target.removeEventListener(Event.COMPLETE, shiftQueue);

evnt.target.removeEventListener(IOErrorEvent.IO_ERROR, shiftQueue);

PageContent(evnt.target).centerLoaderContent(pageWidth, pageHeight);

 

if (_queueArr.length)

{

_queueArr.sort(sortFunction);

loadCurrent();

}

 

}

 

//по удаленности от текущей

private function sortFunction(a:int, b:int):Number

{

return Math.abs(currentPage - a) < Math.abs(currentPage - b)? -1: 1;

}

/**

* ширина листа

*/

public function get pageWidth():Number { return _pageW; }

/**

* высота листа

*/

public function get pageHeight():Number { return _pageH; }

 

/**

* текущая левая страница (0,2,4..)

*/

public function get currentPage():int { return _currentPage; }

public function set currentPage(value:int):void

{

//отсчет всегда по левой четной

value = value - value % 2;

if (value!= _currentPage)

{

_currentPage = value;

setContent(-1, -1, _currentPage, _currentPage + 1);

//render();

dispatchEvent(new BookEvent(BookEvent.CHANGE_PAGE, _currentPage));

}

}

/**

* общее число страниц (включая отсутствующие - нулевую, например)

*/

public function get length():int { return _dataProvider.length; }

 

/**

* массив PageContent

*/

public function get dataProvider():Array/*PageContent*/ { return _dataProvider; }

public function set dataProvider(value:Array/*PageContent*/):void

{

_dataProvider = value;

//спускаем ссылку темплетам

_leftPage.dataProvider = value;

_rightPage.dataProvider = value;

_backSide.dataProvider = value;

_nextSide.dataProvider = value;

 

//определяем мувики прелоадера и ошибки загрузки, если есть

var preloader:DisplayObject;

var error:DisplayObject;

for (var i:int = 0; i < _dataProvider.length; i++)

{

var pageContent:PageContent = _dataProvider[i];

if (pageContent && pageContent.url) {

if (preloaderIcon)

{

preloader = new preloaderIcon();

preloader.x = pageWidth / 2;

preloader.y = pageHeight / 2;

pageContent.preloaderIcon = preloader;

}

if (errorIcon)

{

error = new errorIcon();

error.x = pageWidth / 2;

error.y = pageHeight / 2;

pageContent.errorIcon = error;

}

 

}

}

 

//запускаем загрузку

createQueue();

//включаем обсчет

startRender();

}

 

/**

* темп переворачивания в диапазоне 0...10 (default 5); <br/>

* 0 - без анимации.

*/

public function get speed():Number { return 11 - _turnSpeed; }

public function set speed(value:Number):void

{

_turnSpeed = 11 - value;

 

if (_turnSpeed < 0 || _turnSpeed >= 11)

{

_turnSpeed = 0;

}

}

 

public function get paper():BitmapData { return _paper; }

public function set paper(value:BitmapData):void

{

_paper = value;

 

_leftPage.paper = value;

_rightPage.paper = value;

_backSide.paper = value;

_nextSide.paper = value;

}

 

/**

* надо ли листать колесом мыши

*/

public function get wheelLeaf():Boolean { return _wheelLeaf; }

public function set wheelLeaf(value:Boolean):void

{

_wheelLeaf = value;

_wheelLeaf? addEventListener(MouseEvent.MOUSE_WHEEL, omMouseWheel): removeEventListener(MouseEvent.MOUSE_WHEEL, omMouseWheel);

 

}

/**

* надо ли листать мышкой

*/

public function get mouseLeaf():Boolean { return _mouseLeaf; }

public function set mouseLeaf(value:Boolean):void

{

_mouseLeaf = value;

_mouseLeaf? addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown): removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);

}

/**

* надо ли листать при клике-драге по активному (mouseEnabled=true) коненту страниц

*/

public function get contentLeaf():Boolean { return _contentLeaf; }

public function set contentLeaf(value:Boolean):void

{

_contentLeaf = value;

 

}

}

}

 

Класс BookExample

package

{

import com.bit101.components.*;

import flash.display.*;

import flash.events.*;

import flash.filters.*;

import flash.text.*;

import gadgets.book.*;

import gadgets.Preloader;

import flash.text.TextFieldType;

import flash.text.TextField;

import flash.display.Loader;

import flash.display.SimpleButton;

import flash.ui.Mouse;

import flash.geom.Rectangle;

 

public class BookExample extends Sprite

{

private var _book:Book;

private var _tablo:Label;

 

var t:TextField = new TextField();

var t2:TextField = new TextField();

var eg:TextField = new TextField();

var ts:TextField = new TextField();

var Ts:TextField = new TextField();

var gs:TextField = new TextField();

var p:TextField = new TextField();

var p2:TextField = new TextField();

var n:TextField = new TextField();

var n2:TextField = new TextField();

var t1:TextField = new TextField();

var B:TextField = new TextField();

 

var t21:TextField = new TextField();

var eg1:TextField = new TextField();

var ts1:TextField = new TextField();

var Ts1:TextField = new TextField();

var gs1:TextField = new TextField();

var p1:TextField = new TextField();

var p21:TextField = new TextField();

var n1:TextField = new TextField();

var n21:TextField = new TextField();

var t11:TextField = new TextField();

var B1:TextField = new TextField();

 

var btn:CheckBox = new CheckBox;

 

public function BookExample():void

{

if (stage) init();

else addEventListener(Event.ADDED_TO_STAGE, init);

}

 

private function init(e:Event = null):void

{

stage.displayState = StageDisplayState.FULL_SCREEN;

removeEventListener(Event.ADDED_TO_STAGE, init);

stage.align = StageAlign.TOP_LEFT;

stage.scaleMode = StageScaleMode.NO_SCALE;

ToolTip.init(stage, {textalign: 'center', opacity: 50, defaultdelay: 500});

_book = new Book(610, 700);

_book.x = 30;

_book.y = 30;

 

//иконка загрузки

_book.preloaderIcon = Preloader;

 

//иконка для обозначения ошибки/невозможности загрузки

_book.errorIcon = errorMc;

 

//поля для таблицы в расчетах

t.type = "input";

t.width = 50;

t.height = 50;

t.x = 85;

t.y = 95;

t.text = " 0.00";

t.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

t2.type = "input";

t2.width = 50;

t2.x = 85;

t2.y = 138;

t2.text = " 0.00";

t2.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

n.type = "input";

n.width = 40;

n.x = 148;

n.y = 95;

n.text = " 00";

n.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

n2.type = "input";

n2.width = 40;

n2.x = 148;

n2.y = 138;

n2.text = " 00";

n2.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

p.type = "input";

p.width = 40;

p.x = 200;

p.y = 95;

p.text = " 000";

p.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

p2.type = "input";

p2.width = 40;

p2.x = 200;

p2.y = 138;

p2.text = " 000";

p2.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

ts.type = "input";

ts.width = 50;

ts.x = 275;

ts.y = 119;

ts.text = " 000";

ts.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

Ts.type = "input";

Ts.width = 50;

Ts.x = 358;

Ts.y = 119;

Ts.text = " 000";

Ts.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

gs.type = "input";

gs.width = 50;

gs.x = 442;

gs.y = 119;

gs.text = " 0.00";

gs.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

eg.type = "input";

eg.width = 80;

eg.x = 245;

eg.y = 310;

eg.text = " 0000";

eg.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));

 

B.type = "input";

B.width = 370;

B.height = 180;

B.x = 90;

B.y = 483;

B.multiline = true;

B.text = " ";//"Напишите вывод о проделанной работе!!!";

B.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));

 

// создаем кнопку на листе "расчеты" для сохранения их в отчете

addChild(btn);

ToolTip.attach(btn,'<b>Подтвердите перенос в отчет\nрезультатов опытов и вывода\nо проделанной работы</b>');

btn.buttonMode = true;

btn.move(545, 610);

btn.width = 120;

btn.addEventListener(MouseEvent.CLICK, onMouseClick);

 

//поля для отображения в отчете

 

t1.width = 50;

t1.height = 50;

t1.x = 85;

t1.y = 95;

t1.text = " 0.00";

t1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

t21.width = 50;

t21.x = 85;

t21.y = 138;

t21.text = " 0.00";

t21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

n1.width = 40;

n1.x = 148;

n1.y = 95;

n1.text = " 00";

n1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

n21.width = 40;

n21.x = 148;

n21.y = 138;

n21.text = " 00";

n21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

p1.width = 40;

p1.x = 200;

p1.y = 95;

p1.text = " 000";

p1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

p21.width = 40;

p21.x = 200;

p21.y = 138;

p21.text = " 000";

p21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

ts1.type = "input";

ts1.width = 50;

ts1.x = 275;

ts1.y = 119;

ts1.text = " 000";

ts1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

Ts1.width = 50;

Ts1.x = 358;

Ts1.y = 119;

Ts1.text = " 000";

Ts1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

gs1.width = 50;

gs1.x = 442;

gs1.y = 119;

gs1.text = "0.00";

gs1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

 

eg1.width = 100;

eg1.x = 136;

eg1.y = 214;

eg1.text = "0000";

eg1.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));

 

B1.width = 370;

B1.height = 180;

B1.x = 90;

B1.y = 252;

B1.multiline = true;

B1.text = " ";

B1.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));

 

//заготовки для контента страниц

 

var g:MovieClip = new globe();

g.x = 150;

g.y = 80;

 

var comment:TextField = new TextField();

comment.autoSize = TextFieldAutoSize.CENTER;

comment.x = 100;

comment.y = 210;

comment.text = "картинка с диска,\n мувик из библиотеки\n плюс собственнно этот текст";

comment.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));

comment.selectable = true;

comment.mouseEnabled = true;

 

//создание(определение) страниц книжки

//датапровайдеру передаем массив объектов PageContent, инициализирующих загрузку

//или создающих контент, если переданы готовые дисплейОбжекты

_book.dataProvider = [

null,//нет листа, для имитации обложки

new PageContent("обложка.swf"),

new PageContent("теория1.swf"),

new PageContent("теория2.swf"),

new PageContent("работа.swf"),

new PageContent("расчеты.swf",t,t2,n,n2,p,p2,ts,Ts,gs,eg,B,btn),

new PageContent("отчет1.swf"),

new PageContent("отчет2.swf",t1,t21,n1,n21,p1,p21,ts1,Ts1,gs1,eg1,B1),

new PageContent("теория1_конд.swf"),

new PageContent("теория2_конд.swf"),

new PageContent("кон_работа.swf"),

new PageContent("расчеты_конд.swf"),

new PageContent("отчет_конд.swf"),

new PageContent("отчет2_конд.swf"),

new PageContent("теория1_кинематика.swf"),

new PageContent("теория2_кинематика.swf"),

new PageContent("радио_работа.swf"),

new PageContent("динамика_работа.swf"),

new PageContent("проводник_работа.swf"),

new PageContent("работа_кинематика.swf"),//несуществующая картинка

new PageContent("феерверк.swf")//пустая страница

];

 

createControls();

addChild(_book);

 

//слушаем событие смены страниц (здесь только ради теста)

//_book.addEventListener(BookEvent.CHANGE_PAGE, onPageChange);

 

}

 

function settextformat() {

t1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

t21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

n1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

n21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

p1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

p21.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

ts1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

Ts1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

gs1.setTextFormat(new TextFormat("Cambria", 16, 0x990099, false, false));

eg1.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));

B1.setTextFormat(new TextFormat("Monotype Corsiva", 19, 0x990099, false, false));

 

}

function onMouseClick(event:MouseEvent) {

t1.text = t.text;

t21.text = t2.text;

n1.text = n.text;

n21.text = n2.text;

p1.text = p.text;

p21.text = p2.text;

ts1.text = ts.text;

Ts1.text = Ts.text;

gs1.text = gs.text;

eg1.text = eg.text;

B1.text = B.text;

settextformat();

 

}

 

//элемемнты управления

private function createControls():void

{

_tablo = new Label(this, 50, 315, "0");

 

for (var i:int = 0; i < _book.length; i+=2)

{

var but:PushButton = new PushButton(this, 80 + 20 * i, 750, i + "-" + (i + 1), onPageButClick);

but.setSize(35, 20);

}

}

 

//обработчик радикнопок режима

private function onRadioClick(event:Event):void

{

var rb:RadioButton = event.currentTarget as RadioButton;

_book.mode = rb.label;

}

 

//обработчик слайдера скрости

private function onSliderChange(event:Event):void

{

_book.speed = HUISlider(event.currentTarget).value;

}

 

//обработчик кнопок страниц

private function onPageButClick(event:Event):void

{

var but:PushButton = event.currentTarget as PushButton;

var label:String = but.label;

var n_p:int = parseInt(label.substr(0, label.indexOf("-")));

_book.gotoPage(n_p);

 

}

 

}

 

}

 


Дата добавления: 2015-10-21; просмотров: 39 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
1. ИГПЗС – процесс возникновения и развития государственно-правовых институтов различных гос-в в определенные периоды времени. Методы изучения: исторический (общие исторические особенности), 5 страница | Анастасия Моргунова, директор департамента налогового консалтинга интернет-бухгалтерии «Моё дело» 1 страница

mybiblioteka.su - 2015-2024 год. (0.442 сек.)