Прокрутка текста в динамических текстовых полях. — КиберПедия 

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Прокрутка текста в динамических текстовых полях.

2017-06-19 95
Прокрутка текста в динамических текстовых полях. 0.00 из 5.00 0 оценок
Заказать работу

Если содержимое не умещается в динамическом текстовом поле, его можно прокручивать командами скрипта. При назначении динамическому текстовому полю переменной, возникают ещё две переменные

Имя_переменной.scroll – управляет прокруткой текста

Имя_переменной.maxscroll – равна количеству не уместившихся строк +1

При увеличении Имя_переменной.scroll текст в поле прокручивается вверх. Переменная может принимать значения от 1 до Имя_переменной.maxscroll

Создайте динамическое текстовое поле, высотой, приблизительно 10 строк.

Используя скрипт кадра, заполните поле столбцом чисел

i = 1

t = 1

for (i=1; i<=20;i++){

t = t+i+newline

}

Создайте справа от поля две кнопки со стрелками вверх и вниз, наподобие кнопок скроллинга.


В кнопку со стрелкой вверх введите скрипт

on (release){

t.scroll--

}

Она будет прокручивать текст вниз

. В кнопку со стрелкой вверх введите скрипт

on (release){

t.scroll++

}

Она будет прокручивать текст вверх

Ролик готов

Создайте ещё два динамических текстовых поля с переменными «m» и «s» и добавьте в кадр скрипт

m = t.maxscroll

s = t.scroll

Для обновления значений в этих полях добавьте в ролик простой кадр (F5).

Извлечение части из текстовой строки.

Осуществляется функцией substring (текстовая строка, номер символа начиная с которого извлекается часть, сколько символов в извлекаемой части)

Действие функции можно наблюдать на простом примере. Добавьте в кадр скрипт

x = "abcdefg"

y = substring (x, 2, 3)

После компиляции y получит значение «bcd»

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

Создайте динамическое текстовое поле, присвойте ему переменную t и преобразуйте поле в клип. Клипу присвойте скрипт

onClipEvent(load){

text" = "учим текстовые эффекты!!!"

}

onClipEvent(enterFrame){

i++;

t = substring (“text”, 1, i)

}

 

Упражнение.

Для усиления эффекта добавьте звук и курсор. Измените ролик так, что бы символы появлялись медленнее. (для замедления можно увеличивать I не на единицу в каждом кадре а на небольшую величину, например i+=0.1. Тогда новый символ будет появляться раз в 10 кадров!)

 

Условный оператор

Позволяет ролику действовать по разному, в зависимости от сложившихся условий.

If (логическое утверждение){

Скрипт, который выполняется только в случае, если утверждение истинно

}

Рассмотрим простейший пример. В качестве логического утверждения приведём очевидную истину «2>1». Введите скрипт в кадр и проиграйте ролик

If (2>1){

x = 1

}

В памяти возникла переменная x. Измените утверждение на ложное, например, «2<1»

Теперь в памяти не возникнет переменной.

Если, подсветив строку If в редакторе скрипта, нажать кнопу Add Else/Else If clause, то оператору можно придать более сложный вид

if (логическое утверждение){

Скрипт, который выполняется только в случае, если утверждение истинно}

else{

Скрипт, который выполняется только в случае, если утверждение ложно}

 

или

 

If (логическое утверждение){

Скрипт, который выполняется только в случае, если утверждение истинно}

elseif (второе логическое утверждение, которое анализируется если первое утверждение ложно){

Скрипт, который выполняется только в случае, если второе утверждение истинно}

В приведённом ниже примере анализируется значение переменной x

if (x<0) {

trace("отрицательное")

}

else if (x==0) {

trace("ноль")

}

else {

trace("положительное")

}

Рассмотрим более сложный пример. Предположим, пользователь вводит в текстовое поле число, а ролик решает мало, много, или нормально. Нормальными будем считать числа от 10 до 20. Всё что больше – много, а меньше – мало.

Для начала, создайте два динамических текстовых поля с переменными «n» и «t». В первое поле пользователь будет вводить число, а во втором ролик будет писать свою оценку. Оценку будем запускать кнопкой, так что сделайте на сцене экземпляр кнопки.

Введите в кнопку скрипт

оn (release){

t = "нормально"

//по умолчанию - нормально

if (n<10){

t = "мало"}

else if (n>20){

t = "много"}}

Ролик готов

Дублирование клипа

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

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

Duplicate Movie Clip (имя клипа который дублируется, имя копии, номер слоя в который помещается копия)

Номер слоя определяет, какая из копий помещается поверх других и не имеет отношения к слоям рисования. Что бы дублирование произошло успешно, все новые копии должны помещаться в слои с разными номерами. Рассмотрим простой пример. Создайте на экране экземпляр «Movie Clip» с именем «q» и кнопку. В кнопку введите скрипт

on (release){

duplicateMovieClip ("q", "q1", 1)

}

Откомпилируйте ролик и комбинацией Ctrl L проверьте список объектов

В окне «Output» появится

Layer #0: Frame=1

Movie Clip: Frame=1 Target="_level0/q"

Shape:

Button:

Shape:

Нажмите на кнопку. Как ни странно, копии на экране не появилось, однако список объектов при повторном нажатии Ctrl L покажет наличие второго экземпляра

Layer #0: Frame=1

Movie Clip: Frame=1 Target="_level0/q"

Shape:

Button:

Shape:

Movie Clip: Frame=1 Target="_level0/q1"

Shape:

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

q1._x+=100;

Усложним пример. Пусть кнопка теперь при каждом нажатии будет создавать копию клипа, и рисовать её в случайных координатах. Так как каждая копия должна находиться в своём слое, да и имена у копий лучше сделать разными (хотя в данном случае это необязательно), придётся ввести счётчик копий i.

При каждом щелчке будет наращиваться счётчик, создаваться копия с именем «q номер» в слое с номером равным счётчику. Последние два оператора размещают копию в случайные координаты.

on (release){

i++

duplicateMovieClip ("/q", "q"+i, i)

Eval("q"+i)._x = Random (550)

Eval(“q"+i)._y = Random (400)

}

 

Теперь попробуем реализовать падающий снег. Дублирование в данном ролике будет производиться уже не пользователем, а управляющим клипом. В начале создайте клип с падающей снежинкой (можно с падающим долларом) Я бы рекомендовал «Motion Tween» по маршруту.

Разместите на сцене экземпляр клипа и дайте ему имя s. Теперь займёмся программированием. Можно реализовать управление анимацией в виде трёхкадрового цикла в отдельном клипе, на основной линейке, или на обработчике событий отдельного клипа. Начнём с линейки. Начальных условий не требуется, поэтому достаточно добавить на линейку ещё один ключевой кадр и присвоить ему команду
gotoAndPlay (1)

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

 

i ++

duplicateMovieClip (“s", "s"+i, i)

Eval("s"+i)._x = Random (550)

 

С Новым Годом!

Однако, обратите внимание, что снег валит всё сильнее и сильнее. Клипы которые уже скопированы продолжают циклически исполняться, в то время как появляются всё новые копии. Копию клипа необходимо уничтожить после первого исполнения оператором Remove Movie Clip (имя экземпляра). Конечно, можно поручить эту процедуру управляющему клипу, но тут можно запутаться с именами. Гораздо более изящное решение основывается на том, что данный оператор не действует на оригинал клипа. Поэтому поместим команду в последний кадр анимации снежинки. «А как же быть с именами?», спросите Вы. Очень просто. Во первых, есть свойство _target, которое хранит ссылку на клип в слэш синтаксисе, например если в кадр клипа снежинки с именем «s» поместить скрипт trace(_target), то будет выведено /s

Во вторых this также возвратит ссылку на экземпляр клипа trace(this) выведет _level0.s

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

removeMovieClip (“”) означает «убей сам себя» (ужас!)

И последняя тонкость. В нашем снегопаде есть одна снежинка, которая постоянно появляется на одном и том же месте, это оригинал клипа. Вы можете разместить оригинал за пределами ролика, например, сдвинув его правее за область рисования.

Упражнение

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

 

Буксировка клипа

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

Буксировка включается оператором startDrag ("имя клипа")

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

startDrag ("/q", L=0, T=0, R=100, B=100)

И требование совместить при буксировке центр клипа с положением мышки

startDrag ("/q", true) или startDrag ("/q", 1)

Отключается буксировка командой stopDrag().

Создайте на сцене экземпляр клипа с именем q. Кадру присвойте последний приведённый скрипт. Проиграйте ролик.

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

on (press){

startDrag ("")

}

on (release){

stopDrag()

}

Вернитесь на сцену и сделайте несколько копий экземпляра клипа. Ролик готов.

Упражнение

Создайте ролик с перетаскиваемым бегунком, наподобие установки Alpha в диалоге настройки цвета. В зависимости от положения бегунка в динамическом текстовом поле должно выводиться значение от 0 до 100. При вводе значения в текстовое поле и нажатии Enter бегунок должен принимать соответствующее положение.

Определение позиции мыши

В прежней версии Flash задача определения позиции мыши решалась довольно сложно. Прозрачный клип прикреплялся к указателю мыши командой StartDrag и положение клипа проверялось командой GetProperty. Теперь данная задача решается много проще.

Можно использовать _xmouse и _ymouse свойства для определения местонахождения позиции курсора в клипе. И основная сцена и каждый отдельный экземпляр клипа имеют собственные свойства _xmouse и _ymouse. Различие состоит лишь в разных системах отчёта

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

 

Рассмотрим реальнвй пример. Необходимо создать ролик, в котором в динамических текстовых полях будут выводиться координаты мыши относительно сцены и экземпляра клипа. Нарисуйте квадрат размером 250 на 250. Для указания точных размеров квадрата Вам поможет панель Info, которая активизируется комбинацией Ctrl+Alt+I или командой window-toolbars-info. Преобразуйте квадрат в клип. Присвойте клипу Instance Name, например q. На сцене создайте два динамичесих текстовых поля с именами xroot и yroot. Внутри клипа создайте динамические текстовые поля с именами xclip и yclip. Для создания таких полей понадобится панель Window-panels-Text Options.

Для постоянного мониторинга положения мыши придётся прикрепить скрипт к клипу с событием EnterFrame. Подсветите клип и введите скрипт

onClipEvent (enterFrame) {

}

Команды, которые будут введены между фигурными скобками будут исполняться в каждом кадре. Начнём с основной линейки. Так как на ней находятся динамические текстовые поля с переменными xroot и yroot, а скрипт прикреплён к клипу, необходимо указывать полный путь к этим переменным

_root.xroot

_root.yroot

Основная линейка представляет собой, по сути, экземпляр клипа с именем _root. Свойства этого клипа _хmouse и _ymouse содержат координату мыши на основной линейке. Таким образом, можно записать

onClipEvent (enterFrame) {

_root.xroot=_root._xmouse;

_root.yroot=_root._ymouse;

}

Что касается переменных, принадлежащих клипу q, то, формально, можно было бы записать _root.q.xclip=_root.q._xmouse. Однако, для определения значений текстовых переменных внутри клипа необязательно указывать путь к ним так как скрипт также принадлежит клипу. Поэтому можно ограничиться записью xclip=_xmouse;

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

onClipEvent (enterFrame) {

_root.xroot=_root._xmouse;

_root.yroot=_root._ymouse;

xclip=_xmouse;

yclip=_ymouse;

Упражнение.

Проверить, как повлияет на систему координат внутри клипа его поворот и масштабирование? Пусть изменения над клипом производят кнопки, лежащие на основной линейке.

 


Поделиться с друзьями:

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

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

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.059 с.