voliuf.narod.ru

главная

друзья

помощь сайту

Macromedia Flash MX и программирование на ActionScript

Бесплатные учебники по темам

Партнерская программа

1.Знакомство с ActionScript

2.Применение обработчиков событий

3.Адресация

4.Объекты и их использование

5.Применение функций

6.Создание и модификация объектов

7.Работа с динамическими данными

8.Манипулирование данными

9.Использование условной логики

10.Автоматизация скриптов с помощью циклов

11.Организация ввода и вывода данных во Flash

12.Применение XML во Flash

13.Проверка и форматирование данных

14.Динамическое управление фильмами-символами

15.Привязка динамики к времени и кадрам

16.Звук и ActionScript

17.Загрузка внешних материалов

 


Macromedia Flash MX и программирование на ActionScript 
8.Манипулирование данными
  
В этом уроке мы с вами будем манипулировать числовыми и текстовыми данными, составляя выражения.
Внимание! Для работы с этим уроком необходимы учебные файлы, которые Вы можете загрузить  здесь.

Этот интерактивный "преобразователь температур" будет манипулировать данными, переводя значения температуры по шкале Фаренгейта в значения по Цельсию.


   

Типы данных

Если вы выполнили все предыдущие уроки, то уже знакомы со всеми типами данных. Однако мы ни разу не рассматривали их все сразу, а потому давайте сделаем краткий обзор.

  • Строка. Этот тип данных служит для представления текста, символьных значений; в скриптах строковые значения заключаются в кавычки (например, "hello", "собака").
  • Число. Числа – это числа, в скриптах они указываются без кавычек. Например, 6 означает число шесть, а "6" (в кавычках) – текст, это строковое значение. Очень важно понимать разницу между этими двумя типами данных. особенно при использовании их в выражениях. Например, в выражении с оператором сложения (+, подробнее см. в разделе "Операторы") "6"+"2" даст строку "62", а 6+2 (без кавычек) даст число 8.
  • Булевы, или логические значения. Булево значение может принимать одно из двух состояний: true (истинно) или false (ложно). Внутри ActionScript true и false представлены как 1 и 0.
  • Объект. Объекты служат "устройствами" для хранения данных любых типов, в том числе других объектов. Также объекты имеют свойства и методы, позволяющие управлять ими и использовать их для выполнения различных задач. Обзор типов объектов и способов их использования вы найдете в Уроке 4 – Объекты и их использование.

В этом уроке мы сосредоточимся на манипулировании данными строкового и числового типов.

Построение выражений

Выражение – это определенный набор переменных, значений и операторов для вычисления некоторого итогового значения. Рассмотрим пример выражения:

oneDozen = 6 * 2;
   

Справа от знака равенства мы видим 6 * 2 – это и есть выражение. При выполнении этой строки ActionScript заменит выражение результатом умножения 6 на 2, и oneDozen получит значение 12. Выражения могут также содержать переменные, массивы, вызовы функций – все это служит для вычисления итогового результата. Например:

total = subTotal + tax;
   

Здесь значением total станет результат сложения переменных subTotal и tax; subTotal + tax – это выражение.

discount = totalPrice * employeeDiscount[2];
   

Здесь значение discount получается как результат умножения переменной totalPrice на значение третьего элемента массива employeeDiscount; totalPrice * employeeDiscount[2] есть выражение.

usDollars = 10;
japaneseYen = convertToYen(usDollars);
   

Здесь japaneseYen получает значение, возвращенное функцией convertToYen() – вызов функции сам по себе является выражением.

Примечание Подробнее о функциях смотри Урок 5 – Применение функций.

Где применяются выражения:

  • Присвоение значений переменным
  • Присвоение значений элементам массивов
  • Установление условий (с помощью операторов сравнения)
  • Динамическое указание имен фильмов-символов, переменных и объектов
  • Динамический вызов функций
  • Прочее

Использование выражений позволяет избежать жестко закодированных значений, которые, будучи раз установлены, не изменяются ни при каких обстоятельствах. Манипулирование данными посредством выражений позволяет добавить скриптам динамичности, а проектам – интерактивных возможностей. Вероятно, вы уже поняли, что большинство скриптов построено на использовании выражений.

Операторы

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

Примечание В этом разделе рассматриваются арифметические операторы. Информацию об операторах сравнения и логических операторах вы найдете в Уроке 9 – Использование логических условий.

Арифметические операторы

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

  • Оператор сложения (+). Служит для сложения двух чисел. Пример: totalCost = productPrice + tax; – результат получается сложением значений двух переменных.
  • Оператор инкремента (++). Прибавляет к значению единицу. Пример: ++myAge; – значение переменной myAge увеличивается на 1 (эквивалент выражения myAge = myAge + 1;).
  • Оператор вычитания (-). Служит для вычитания одного значения из другого. Пример: moneyInWallet = paycheck – moneySpent; – результат получается вычитанием moneySpent из paycheck.
  • Оператор декремента (--). Уменьшает значение на единицу. Пример: --bottlesOfBeer; – бутылок пива станет на одну меньше.
  • Оператор умножения (*). Умножает одно числовое значение на другое. Пример: hoursPer-Week = 24 * 7; – количество часов в неделе получается в результате умножения 24 на 7.
  • Оператор деления (/). Делит одно число на другое. Пример: hourlyRate = paycheck / hoursBilled; – итог получается делением значения paycheck на значение hoursBilled.
  • Оператор нахождения остатка от деления (%). Выдает остаток от деления одного целого числа на другое. Пример: 4 % 2; – результатом будет 0, поскольку 4 делится на 2 без остатка. Пример: 7 % 3; – даст результат 1, так при делении 7 на 3 получается 2 и остаток 1.


 

Строковые операторы

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

  • Оператор конкатенации (+). Конкатенацией называется соединение, "склеивание" двух строк. Оператор конкатенации, который обозначается знаком +, как и оператор сложения чисел, объединяет два строковых значения в одну строку. Пример: burthDayMessage = "Мне исполнилось " + age + " лет.";. Здесь операторы конкатенации соединят три части сообщения вместе; если age имеет значение 26, то в результате получится строка "Мне исполнилось 26 лет.".

Совет В отличие от некоторых других языков программирования, в ActionScript не требуется при создании переменной объявлять, значение какого типа она будет содержать. В зависимости от контекста срока может рассматриваться как число и наоборот. В этом есть свои преимущества, но из-за этого же могут возникнуть и проблемы. Дело вот в чем. Поскольку знак "плюс" (+) служит для обозначения сразу двух операторов – сложения чисел и конкатенации строк, Flash должен знать, с какими значениями он имеет дело – со строками или числами. При этом могут возникать недоразумения, особенно если данные загружаются из внешних источников. Например, Flash в выражении вроде PayCheck1 + PayCheck2 может посчитать два числа строками, и, вместо того, чтобы складывать, "склеит" их (45+65 даст результат "4565" вместо 110). При получении данных из внешних источников или полей, в которые информацию вводит пользователь вы можете, во избежание ошибок, использовать функцию Number() – например, Number(PayCheck1) + Number(PayCheck2) – в этом случае вы можете быть уверены, что значения будут рассматриваться именно как числовые.

Приоритет

Нередко выражения содержат не один оператор, а сразу несколько. В этом случае важно точно представлять себе порядок их выполнения, который определяется приоритетом операторов. Вы прекрасно знаете, что математические действия над числами выполняются поочередно (например, возьмем выражение myNumber = 20 * 5 - 3: понятно, что нельзя произвести оба действия – умножение и вычитание – одновременно). Порядок вычислений в выражениях ActionScript определяется следующими правилами приоритета:

  1. Все вычисления в скобках выполняются раньше, чем вычисления вне скобок. Если вы хотите точно контролировать порядок вычислений в своих выражениях, используйте скобки.
  2. Действия умножения и деления выполняются раньше, чем сложение и вычитание. Между собой умножение и деление имеют равный приоритет, и потому, если в выражении имеется несколько таких операторов, они выполняются (при отсутствии скобок) по порядку следования слева направо.
  3. Сложение и вычитание выполняются в последнюю очередь. Эти действия имеют равный приоритет, они выполняются (при отсутствии скобок) по порядку следования слева направо.

Давайте рассмотрим несколько примеров.

myVariable = 5 + 7 - 3;
        

Поскольку сложение и вычитание имеют равный приоритет, в этом выражении операторы выполняются просто слева направо, переменной myVariable в результате будет присвоено значение 9.

myVariable = 5 + 7 * 3;
        

Поскольку умножение имеет приоритет перед сложением, сначала 7 умножается на 3, а затем к результату прибавляется 5. В итоге переменная myVariable получает значение 26.

myVariable = (5 + 7) * 3;
        

Поскольку вычисления в скобках имеют приоритет, сначала 5 прибавляется к 7, затем результат умножается на 3. В итоге переменная myVariable получает значение 36.

myVariable = ((2 + 8) * (4 – 2)) / 5;
        

Снова приоритет скобок: сначала складываются числа 2 и 8, затем из 4 вычитается 2. Эти два результата перемножаются, итог делится на 5. Переменной myVariable присваивается значение 4.


 

Манипуляция с числовыми данными с помощью объекта Math

Математические операторы, С которыми мы познакомили вас в этом уроке, позволяют строить выражения с использованием простых арифметических действий. Для более сложных манипуляций с числами во Flash имеется объект Math с его методами. Здесь мы познакомим вас лишь с некоторыми, наиболее часто используемыми методами объекта Math; в других уроках этой книги вам встретятся и многие другие методы.

Наиболее часто применяемые методы объекта Math:

  • Math.abs() Метод возвращает абсолютное значение (модуль) числа. Пример: distance = Math.abs(here – there); – если результатом вычитания there из here будет отрицательное число (например, -375), метод Math.abs преобразует его в абсолютное значение – положительное (375).
  • Math.round() Этот метод округляет число до целого. Если после десятичной запятой стоит число 5 или более, то округление происходит в большую сторону, если меньше 5 – в меньшую. Пример: cupsOfCoffee = Math.round(3.7); – поскольку после запятой стоит 7 (больше 5), число округляется в большую сторону, результатом будет 4.
  • Math.floor() Метод действует подобно Math.round(), но в этом случае округление всегда производится в меньшую сторону.
  • Math.ceil() Метод тоже действует подобно Math.round(), но округление всегда производится в большую сторону.
  • Math.sqrt() Метод извлекает из числа квадратный корень. Пример: answer = Math.sqrt(9); – здесь answer получит значение 3.

В этом упражнении мы, используя операторы, выражения и методы объекта Math, напишем несложный алгоритм преобразования значений температуры по шкале Фаренгейта в значения по шкале Цельсия. Заодно запрограммируем изображение термометра с соответствующим уровнем ртути.

  1. Откройте файл tempConverter1.fla из папки Lesson08/Assets.

Все символы и текстовые поля уже созданы и размещены на сцене, нам остается сосредоточиться на ActionScript. Основной монтажный стол состоит из четырех слоев: Actions, Thermometer, Temperature Input и Background.

Слой Background содержит основное фоновое изображение. В слое Temperature Input находится текстовое поле для ввода, его имя – temperature. Сюда будут вводиться значения температур для преобразования. Кроме этого поля, в данном слое имеется еще два: fahrenheit и celsius – в них будут отображаться соответствующие значения температур. В этом же слое находится кнопка с надписью "Convert". Слой Thermometer содержит экземпляр фильма-символа с именем mercury, он будет иллюстрировать уровень ртути в термометре. Мы же сейчас займемся слоем Actions.



 

  1. Откройте панель Действия, выделите кадр 1 слоя Actions и введите следующий скрипт:
function changeTemp() {
}
   

Это – начало описания функции. Функция эта будет вызываться при нажатии кнопки Convert, и выполнять она должна будет следующие задачи:

  • Перевести значение по Фаренгейту в шкалу Цельсия.
  • Убедиться, что введенное значение (по Фаренгейту) укладывается в диапазон термометра.
  • Установить "уровень ртути" в термометре на нужную высоту.
  1. Внутри описания функции создайте две переменные:
boilingPoint = 212;
absoluteZero = -460;
   

Наш термометр работает в большом диапазоне температур – от абсолютного нуля (примерно -460 градусов Фаренгейта) до точки кипения воды (212 градусов Фаренгейта), это будут максимально и минимально возможные значения для нашего конвертера.

  1. После строки absoluteZero = -460; поместите блок, проверяющий, укладывается ли введенное значение в установленные пределы:
if (temperature.text > boilingPoint) {
  temperature.text = boilingPoint;
} else if (temperature.text < absoluteZero) {
  temperature.text = absoluteZero;
}
fahrenheit.text = temperature.text;
   


 

Эта часть функции – оператор if/else if – будет работать "фильтром" данных. Если значение, введенное пользователем (temperature.text), больше, чем значение boilingPoint (которое равно 212), то вместо введенного пользователем будет автоматически установлено значение boilingPoint. В противном случае, если пользователь ввел значение, меньшее, чем absoluteZero (-460), вместо него автоматически устанавливается значение absoluteZero. После фильтрации значение temperature.text отображается в экземпляре текстового поля fahrenheit.

Подобные фильтры часто используются в программировании – ведь далеко не всякая функция может принимать абсолютно любые значения параметров.

  1. После строк, добавленных на предыдущем шаге, вставьте следующее выражение, переводящее значения по Фаренгейту в шкалу Цельсия:
celsius.text = Math.round((5 / 9) * fahrenheit.text - 17.777);
   

Выражение справа от знака равенства переводит значение температуры из одной шкалы в другую. Результат выражения присваивается свойству text текстового поля celsius; таким образом, данная строка отображает преобразованное значение в текстовом поле.

Обратите внимание на использование скобок в этом выражении. Выполняя эту строку кода, Flash начнет производить вычисления с самой внутренней пары скобок – в данном случае (5 / 9). Затем будет выполнено умножение, затем – вычитание. Метод Math.round() будет вызван только после того, как будет окончательно вычислено числовое значение аргумента. Это значение метод округлит до ближайшего целого числа.


 

  1. После предыдущей строки добавьте следующие:
scalePercent = (Math.abs(absoluteZero - fahrenheit.text) /
  Math.abs(absoluteZero - boilingPoint)) * 100;
mercury._yScale = scalePercent;
   

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

Значение scalePercent вычисляется на основе отношения двух значений: превышения введенной температуры над абсолютным нулем и полного температурного диапазона. Чтобы вы лучше это поняли, давайте предположим, что пользователь ввел в текстовое поле fahrenheit значение 56. Мы знаем, что absoluteZero равняется -460, boilingPoint равняется 212. Вычисления будут происходить следующим образом:

(Math.abs(-460 - 56) / Math.abs(-460 - 212)) * 100;
   

далее

(Math.abs(-516) / Math.abs(-672)) * 100;
   

далее

((516) / (-672)) * 100;
   

далее

(.767) * 100;
   

далее

76.7
   

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

Вторая строка скрипта устанавливает масштаб по вертикали для экземпляра фильма-символа mercury равным значению scalePercent. Так, если оно равно 76,7, то экземпляр mercury уменьшится до 76,7 процента от своего нормального размера (100 процентов).



 

  1. Выделите кнопку Convert и введите в панели Действия следующий скрпит:
on (release, keyPress "<Enter>") {
  changeTemp();
}
   

При нажатии этой кнопки или клавиши Enter будет вызвана функция changeTemp(), которую мы только что создали.

  1. Выполните команду Управление > Проверить фильм (Control > Test Movie). Введите значение температуры и нажмите кнопку.

После нажатия кнопки вы увидите, что высота фильма-символа mercury соответствующим образом уменьшилась. Текстовые поля celsius и fahrenheit заполнились данными. Если вы попытаетесь ввести температуру, выходящую за установленные нами пределы, то сработает фильтр – оператор if/else if, и значение будет "обрезано" по верхней или нижней границе.

  1. Закройте тестовый фильм и сохраните свою работу как tempConvert2.fla.

Итак, мы разобрались с арифметическими операторами и научились пользоваться методами объекта Math.

Манипуляции со строками

До сих пор в этом уроке мы имели дело главным образом с числами. Теперь пришло время получше узнать методы объекта String, с которым вы познакомились в Уроке 4. При помощи этих методов можно найти в строке определенный символ, изменить регистр символов, "перевернуть" строку задом наперед и много чего еще.

Вот несколько наиболее часто используемых методов объекта String:

  • length Свойство объекта String, содержащее значение количества символов в строке. Пример: numCharacters = userName.length; – здесь значением numCharacters станет число символов в строковой переменной userName. Если userName имеет значение "Jobe", результат будет 4.
  • substr(start, length) Метод возвращает часть строки, основываясь на двух параметрах: стартовом индексе и длине (число символов, включая стартовый). Если параметр length не указан, то возвращается подстрока от стартового символа до конца строки. Пример: name.substr(1, 2); – если name имеет значение "Kelly", метод даст результат "el". Буква e имеет индекс 1, число 2 указывает, что подстрока должна включать два символа.
  • toLowerCase() Этот метод переводит все символы строки в нижний регистр. Пример: message.toLowerCase(); – если message имеет значение "Hello", то результатом будет "hello".
  • toUpperCase() Этот метод переводит все символы строки в верхний регистр. Пример: message.toUpperCase(); – если message имеет значение "Hello", то результатом будет "HELLO".

Примечание Как упоминалось в Уроке 4, свойство text экземпляров текстовых полей тоже рассматривается как экземпляр объекта String, а значит, к нему применимы и все методы этого объекта. Например, myTextField.text.toUpperCase(); переведет текст в текстовом поле myTextField в верхний регистр.

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

  1. Откройте madlibs1.fla из папки Lesson08/Assets.

В этом файле три слоя: Background, Text Fields и Actions. Слой Background содержит основное графическое оформление. В слое Text Fields находится пять текстовых полей для ввода, одно динамическое текстовое поле и кнопка Submit. А со слоем Actions v сейчас поработаем.



 

Пять текстовых полей для ввода называются (сверху вниз) verb1, properNoun, verb2, adjective и noun. В них пользователь должен будет вводить слова (соответственно: первый глагол, имя собственное, второй глагол, прилагательное и существительное), из которых будет генерироваться предложение. Текстовое поле большего размера, расположенное в правой нижней части сцены, называется paragraph; в нем и будет отображаться составленное предложение.

  1. Откройте панель Действия, выделите кадр 1 слоя Actions и введите следующий скрипт:
function generate() {
}
   

Это – начало описания функции. Функция будет вызываться при нажатии кнопки Submit. В окончательном виде функция должна будет взять все введенные пользователем слова, изменить их при необходимости и составить с этими словами предложение.

  1. В описание функции generate() вставьте следующие четыре строки:
verb1.text = verb1.text.toLowerCase();
verb2.text = verb2.text.toLowerCase();
adjective.text = adjective.text.toLowerCase();
noun.text=noun.text.toLowerCase();   


 

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

  1. После строки noun.text=noun.text.toLowerCase(); вставьте следующий скрипт:
properNoun.text = properNoun.text.substr(0,1).toUpperCase() +
properNoun.text.substr(1).toLowerCase();
   

В этом скрипте properNoun.text есть ссылка на текст в поле properNoun; это поле должно содержать чье-то имя. Поэтому в этой строке первая буква (символ с индексом 0) должна быть заглавной, а остальные – строчными. Чтобы обеспечить это наверняка, мы применяем метод substr(). Как видите, он используется в нашем выражении дважды. Сначала properNoun.text.substr(0,1) возвращает строку, состоящую из одной первой буквы значения properNoun.text, которая переводится в верхний регистр методом toUpperCase(). Во второй половине выражения также использован метод substr(), но на сей раз подстрока берется, начиная со второй буквы (символ с индексом 1). Поскольку длина (второй параметр метода substr()) не указана, в подстроку войдут все символы до конца строки. Полученное в результате строковое значение переводится в нижний регистр методом toLowerCase(). Наконец, обе полученные строки объединяются оператором конкатенации. Таким образом, если пользователь может ввести хоть "kelly", хоть "kElLy" – в результате выполнения нашего выражения все равно получится "Kelly".


 

  1. Добавьте в функцию generate() последнюю строку:
paragraph.tex = "You " + verb1.text + " into love with " + properNoun.text +
  " when you " + verb2.text + " "+ properNoun.text + " eating a " +
    adjective.text + " " + noun.text + ".";
   

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

Совет Объединяя несколько строковых значений, будьте внимательны, не забывайте заключать каждое значение в кавычки. Стоит пропустить кавычки хотя бы в одном месте, и результат будет ошибочный. Явные ошибки панель Действия сможет обнаружить и показать вам строку, в которой присутствует синтаксическая ошибка.



 

  1. Выделите кнопку Submit и присоедините к ней следующий скрипт:
on (release, keyPress "<Enter>") {
  generate();
}
   

При нажатии этой кнопки или клавиши Enter будет вызвана написанная нами функция generate().

  1. Выполните команду Управление > Проверить фильм (Control > Test Movie).

Введите текст в каждое из полей для ввода, затем нажмите кнопку Submit, и посмотрите, что за предложение получилось. Попробуйте сделать это еще раз, при вводе перемешивая заглавные и строчные буквы. Как видите, манипулировать строками в ActionScript совсем не трудно.

  1. Закройте тестовый фильм и сохраните свою работу в файл madlibs2.fla.

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

источник: http://www.INTUIT.ru 


 

13 центов(0,13$) за клик, выплаты через WebMoney каждый вторник +10% с рефералов

Мы выкупаем 100% трафа! $12 за 1000 хостов (РФ), и до $4 за 1000 хостов (зарубежный траф) + 10% с дохода Ваших рефералов!
 Выплаты через
WebMoney

~80-100$ за1000 хостов 2.5$ за 1 смс.
реф. процент - 10 %Выплаты происходят раз в неделю, в четверг на
WebMoney
 
 

 

____________________________

Посмотреть порно видео в онлайне »

_______________________________

 

   
   
Сайт управляется системой uCoz