Сегодня: Пятница, 29.03.2024, 04:29 (МСК)| Здравствуйте, Гость| Мой профиль | Регистрация | Вход | RSS

Домашние системы
3D-видения

Спецэффекты в Cinema4D

Роботы и экзоскелеты

ТВ-тюнеры. Как выбирать?

Программы — виртуальные гитаристы
Главная » РАЗРАБОТКА КОМПЬЮТЕРНЫХ ИГР

Территория Flash. Основы ActionScript 2.0. Выпуск 3

30.07.2010
Итак, это очередная территория Flash/Flex. Наверняка тем, кто уже владеет Flash на уровне программирования реальных и действующих приложений, скучно читать вводную часть по ActionScript2. Посему я предлагаю вам два тестовых задания из серии, «что лучше». Можете попробовать, времени это займет не много. Причем данные задания и не совсем флэшевые, и могут реализовавыться в любых других языках. Мы просто покрутим алгоритмы.


Задание №1. ListBox


ListBox — это стандартная компонента, без которой не обходится ни одно приложение. Если ее писать с нуля в коде, то по стандартной методе это делается с помощью панели, на которую помещаются Item’ы, а потом мы меняем ее положение с помощью скролл-баров. Сверху ставим маскирующий слой. Это стандартное решение для данной компоненты. 
Но есть и другой вариант. Например, у нас есть определенное количество текстовых полей (допустим шесть), и мы по ним крутим массив содержащий Item’ы. 
Сделайте два варианта, посмотрите, какой из них лучше и выгоднее. Причем очевидно, что у каждого из двух есть свои преимущества в отдельных случаях.


Задание №2. Случайный цвет


Конечно, мы знаем, что каждый цвет в ActionScript2 задается в шестнадцатеричной форме, а для ее обозначения запись начинается с «0х». Допустим, у нас есть текстовое поле с любым текстом и кнопка, по нажатии на которую цвет этого текста автоматически меняется на любой случайный.  
Причем (это я для начинающих), цвет задается по модели RGB (красный, зеленый, синий — эта цветовая модель называется аддитивной, в то время как CMYK — субтрактивная, она не используется), а саму запись можно представить так: 0хFFFFFF, где первые два символа после «0х» отвечают за красный, следующие два — за зеленый, и последние два — за синий. В шестандцатеричном представлении для записи используются цифры от 0 до 9 и буквы от A до F. Как вы понимаете, у каждого из трех основополагающих цветов в рамках данной записи может быть 256 градаций интенсивности, а суммарное количество возможных цветов составляет около 16 млн. 
Так вот стоит задача сделать режим подбора случайных чисел для выбора цвета. Это можно сделать как random для 16 млн в десятичном представлении и последующим переходом на шестнадцатеричный вариант, а можно и по-другому, а именно, разбить шестнадцатеричную запись после «0х» на шесть символов и сделать подбор каждого из них случайным образом (запустить шесть операций random из 16 значений). После этого сделать конкатенацию результатов в одну строку и обозначить как цвет.
Для каких случаев второй вариант будет лучше? 


Переходим к истокам


А теперь, после того как «старики» загружены, есть о чем поговорить и с начинающими. Напомню, что мы обсуждаем типы переменных, вернее, пока мы остановились на типах данных. В прошлый раз мы обсудили три элементарных number, string, boolean, сегодня очередь трех следующих — undefined, null и object. 


Тип undefined


Если говорить простыми словами, то «у вашей переменной нет конкретного значения». Именно это и обозначается как undefined. То есть, если вы его не определили заранее, или же мы имеем нечто типа sin(0), вам выведется undefined. Почему я произнес «выведется»? Дело в том, что undefined очень часто используется в модулях обработчиков ошибок и при отладке приложений. Он достаточно удобен, причем при конвертации в числовой тип он становится «NaN» (не определено), а в строчном виде выводится как «undefined». Данные введения появились только в ActionScript2, до этого все преобразовывалось в «0» или пустую строку соответственно, что было отклонением от стандарта ECMA-262. 
Суть undefined нужно понимать. Например, многие, кто начинают работу с чтением XML-файлов с помощью рекурсивной функции, уже знают, что данные внутри функции чтения видны и доступны, но при их использовании за ее рамками выводится «undefined». Для исправления этой ошибки необходимо конкретно указать тип считываемых данных (string), тогда все будет работать нормально. То есть, говоря специфическим языком, код изначально не «видит» переменные и/или их значения.


Тип null


Очень похоже на undefined с одной тонкой разницей, что этот тип предназначен для  задания переменных и параметров в коде. То есть, если простыми словами: «мы обозначаем, что переменная или параметр существуют, однако никакой информации на данном этапе им передавать не нужно». И, внимание (!), при преобразовании в числовой тип null становится NaN, а не нулем как в предыдущей версии ActionScript. То есть, практически полная идентичность с undefined.
Почему я так подробно останавливаюсь на результатах преобразования этих двух типов в другие элементарные? Чтобы показать, что коды, написанные в более ранних версиях Flash могут оказаться полностью несовместимыми с тем, что есть во Flash MX 2004/8. 
А общими словами, undefined необходим большей частью для локализации ошибок, а null для задания переменных и параметров с неопределенными значениями. 


Тип object


Теперь мы подходим к самому интересному. Объекты в ActionScript — это ассоциативные массивы (термин, известный разработчикам на Perl и PHP), неупорядоченно хранящие в себе списки свойств. Под свойствами в данном случае может пониматься любая элементарная величина, функция или объект. Таким образом можно ввести разделение на элементарные и составные объекты, а под их свойствами — контейнеры данных. Читаем определение переменной из прошлого выпуска «территории», да, она тоже является контейнером данных. Дело в том, что термины «свойство» и «переменная» обозначают практически одно и то же. Только переменные мы задаем в рамках кода, а свойства обозначаем при формировании объекта, они являются его частью. Например, тот же объект Math. Пишем строку:

trace (Math.PI);

При запуске на исполнение в окне Output отобразится «3.14159265358979». То есть, константа, соответствующая числу пи, хранится как свойство объекта Math. Это самый простейший пример, но он показывает, что разница между понятиями «переменная» и «свойство объекта» не велика. В случае, когда свойство содержит в себе функцию, применимо понятие «метод». 
А теперь взгляните внимательно на нашу введенную строчку и заметьте, что свойство или метод пишутся после «.». Такой вариант записи называется точеченой нотацией, и известен всем по С-подобным языкам (С++, Java). Но точечная нотация — это не единственный метод вызова свойств, нашу строку можно записать и так:

trace (Math ["PI"]);

То есть, свойство у нас взято в квадратные скобки, и обратите внимание, само свойство записывается как строка, то есть берется в кавычки. Для чего это делается? Просто само имя свойства может включать нестандартные для обычных имен символы, которые в обычной нотации не прочитаются или не правильно интерпретируются, например, «//», также они могут начинаться цифр, что запрещено стандартом. То есть, о таком способе записи вы должны просто знать. К тому же это вам пригодится при самостоятельно задании свойств объекта, например:

var NObj = {};
NObj ["//"] = "Кот";
NObj [18] = "Кошка";
trace (NObj ["//"]+NObj ["18"]);

При запуске выведет «КотКошка». Но, если вы напишете, например, trace (NObj.18), то естественно сигнализируется ошибка, поскольку идентификатор не может начинаться с цифры, так же как и содержать символы операторов. Но если вы напишете так:

NObj ["absj"] = "Кошка";
trace (NObj.absj);

… то все будет нормально работать, и окно Output выведет «Кошка». Параллельно с этим вы научились на примитивном уровне задавать свойства для объекта, и поняли, что если идентификатор не содержит символов операторов и не начинается с цифры, записи NObj ["absj"] и NObj.absj являются идентичными. 
Плюс к этому те, кто повнимательнее, даже по тому же методу записи с использованием квадратных скобок, заметили схожесть объектов с массивами, то есть на самом деле объекты, как и говорилось в начале подраздела являются неупорядоченными ассоциативными массивами. Хотя, забегая вперед, могу отметить, что в ActionScript2 массивы относятся к классу объектов, только в отличие от данного варианта у них есть целочисленные индексы, не более того. Все очень упрощено, и, кстати, как следствие вы потом узнаете, что массивы в ActionScript2 отличаются от того, что вы можете встретить в других языках программирования. 

Кристофер

Перепечатка материалов или их фрагментов возможна только с согласия автора.







Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ассоциация боевых роботов
Рекомендуем...
Новости

Разделы

Опросы

Какой язык программирования вы считаете наиболее актуальным сегодня?
Всего ответов: 329

Друзья

3D-кино






Найти на сайте:








Об авторе       Контакты      Вопрос-ответ        Хостинг от uCoz