Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
img2.name = ”img2”;
img2.x = 40;
img2.y = 85;
img2.src = ”img2.png”;
img2.parent = this;
</script>
Объект включается в иерархию сцены и инициализируется при присвоении свойству parent ссылки на объект, который уже является частью сцены. При этом свойства объекта лучше задать до установки свойства parent.
Для удаления объекта из сцены необходимо свойству parent присвоить значение null. Если в сцене не сохранилось других ссылок на объект, то он немедленно удалится.
Событийная модель: классификация событий, способы задания обработчиков событий.
Объекты сцены и некоторые глобальные объекты могут порождать различные события. Эти события могут порождаться:
1) системными событиями мыши;
2) системными событиями клавиатуры;
3) уведомлениями об изменении состояния динамических объектов;
4) уведомлениями об истечении некоторого промежутка времени;
5) уведомлениями об изменении свойств;
6) скриптами на JavaScript;
7) другими системными событиями.
Системные сообщения от мыши порождают события видимых двухмерных объектов (супертип Visible), «кнопок» (супертип Button) и трехмерных объектов (супертип 3DObject). Системные сообщения от клавиатуры порождают события «кнопок» (супертип Button). Уведомления об изменении состояния динамических объектов порождают, соответственно, события динамических объектов (супертип Continuous). Уведомления об истечении некоторого промежутка времени могут порождать события объекта sequencer. Уведомления об изменении свойств порождают события изменения свойств. Скрипты могут порождать как предопределенные события объектов любого типа, так и события, определенные разработчиком сценария. Некоторые системные события после обработки программой-реализатором могут порождать события подобъектов глобального объекта Player.
Чтобы включить в сцену обработчик какого-либо события, необходимо вставить в нужное место элемент script и указать это событие в параметре event. Например, чтобы скрыть изображение, когда на нем будет нажата левая кнопка мыши, необходимо вставить следующий элемент script:
<image name=”img1” src=”img1.png”>
<script event=”onPress”>
hide();
</script>
</image>
При включении элемента script в описание другого элемента, Java-script выполняется в контексте этого элемента. Элемент script можно не включать в описание элемента, порождающего событие:
<image name=”img1” src=”img1.png”/>
<script event=”img1.onPress”>
img1.hide();
</script>
При обработке событий мыши можно использовать свойства xMouse и yMouse, которые доступны только для чтения и имеют значение координат мыши относительно координат самого объекта.
Большинство видимых двухмерных объектов могут быть «кнопками» (унаследованы от супертипа Button). По умолчанию, активной зоной объекта является прямоугольник, в который вписывается объект (x, y, width, height). Для изображений с прозрачностью активной зоной является вся видимая часть изображения. Для композиций – все активные зоны входящих в нее видимых элементов. Активную зону объекта можно переопределить с помощью свойства hitArea. Активная зона может быть задана либо прямоугольной, либо в форме многоугольника. Активная зона прямоугольной формы задается путем присвоения свойству hitArea строкового значения в формате “[x, y, ширина, высота]”, где x и y – координаты верхнего левого угла зоны относительно координат объекта. Активная зона в форме многоугольника задается в формате “{(x1, y1), (x2, y2), … (xn, yn)}”, где xm и ym – координаты вершин многоугольника относительно координат объекта.
<image name=”img1” src=”img1.png” hitArea=”{(0,0), (30,0), (0,30)}” />
Чтобы объект стал «кнопкой», необходимо задать хотя бы один обработчик «кнопочных» событий:
onPress - нажата кнопка мыши на активной зоне объекта;
onRelease - кнопка мыши отпущена на активной зоне объекта;
onReleaseOutside - кнопка мыши отпущена вне активной зоны объекта;
onRollOver - указатель мыши «наехал» на активную зону;
onRollOut - указатель мыши «съехал» с активной зоны.
При наведении указателя мыши на активную зону курсор будет меняться соответствующим образом. Отменить изменение вида курсора можно при помощи установки свойству useHandCursor значения false.
Существует специальный объект Button, который не имеет видимого представления, но является «кнопкой». Активная зона этого объекта должна быть определена через свойство hitArea.
<button name=”btn1” hitArea=”[20,20, 300,200]” />
<script event=”btn1.onPress”>
img1.hide();
</script>
Обработчики, которые вызываются при изменении свойств объектов, задаются так же, как и обработчики событий, но вместо атрибута event указывается атрибут watch:
<image name=”img1” src=”img1.png”/>
<image name=”img2” src=”img2.png” visible=”false”/>
<script watch=”img1.visible”>
if(img1.visible)
img2.hide();
else
img2.show();
</script>
В данном примере изображение img2 показывается, когда скрывается изображение img1 и наоборот.
При создании сценариев иногда возникает необходимость завести событие, которое не определено, например, когда композиция используется в качестве вспомогательного объекта. Такие пользовательские события определяются атрибутом userEvent, значение которого задается в открывающем тэге XML-описания объекта порождающего данные события.
<composition name=”controller” userEvents=”evStepChanged evFinish”>
<script>
this. step = 0;
function gotoNextStep(){
step++;
if(step == 5)
fireEvent(”evFinish”);
else
fireEvent(”evStepChanged”);
}
</script>
</composition >
Здесь у композиции controller задается два пользовательских события evStepChanged и evFinish. Они порождаются в методе gotoNextStep, и для них может быть задано любое количество обработчиков в любом элементе сцены, в котором можно задавать обработчики событий и из которого можно задать «абсолютный» или относительный путь к композиции controller:
<script event=”scene. controller. evStepChanged”>
…
</script>
Вычисление значений атрибутов.
В сценариях иногда бывает необходимо вычислять значения атрибутов XML-элементов непосредственно во время создания JavaSript-объектов элементов сценария. Для этого определен XML-элемент define, с помощью которого можно определять константы, и псевдофункция eval, которую можно использовать для вычисления значений атрибутов с использованием определенных через define констант.
Элемент define имеет атрибут name, задающий имя константы, и атрибут value, содержащий выражение на JavaScript, результат вычисления которого будет значением константы:
<define name=”BasePath” value=”’/resources/’”/>
Выражение вычисляется в контексте, отличном от контекста основной сцены, поэтому в нем недоступны текущая сцена, глобальные объекты и стандартные классы. Доступны только операции над константами JavaScript и константы, определенные в сценарии ранее.
Значение атрибутов других элементов сценария, начинающихся с “eval(”, будут вычисляться на этапе построения иерархии загружаемой сцены и классов:
<image name=”img1” src=”eval(BasePath+’im1.png’)”/>
На выражения в псевдофункции eval действуют те же ограничения, что и на выражения в атрибуте value элемента define.
Управление последовательностью воспроизведения элементов сценария.
Последовательность воспроизведения элементов сценария может быть задана с помощью обработчиков событий окончания выполнения объектами некоторых действий, имеющих продолжительность во времени (например, используя событие onPlayed). Однако такой подход имеет некоторые ограничения и не очень удобен, поэтому существует элемент sequencer, позволяющий задавать последовательность воспроизведения элементов сценария более явным и гибким образом.
Элемент sequencer включает в себя последовательность элементов script, которые выполняются последовательно один за другим во время воспроизведения. Скрипты sequencer-а отличается от скриптов других элементов тем, что, во-первых, они выполняются в контексте родительского объекта, а, во-вторых, момент начала выполнения следующего скрипта зависит от результата выполнения предыдущего. Так как sequencer унаследован от супертипа Continuous, управление им осуществляется с помощью установки свойств playing, currentFrame и loop или командами play, stop, rewind и т. д. Значение свойства currentFrame соответствует порядковому номеру скрипта, начиная с нуля.
Результат выполнения скрипта трактуется следующим образом: если в результате получилось число, то выполнение следующего скрипта начинается через время, соответствующего этому числу миллисекунд. Если в результате получилось булевское значение false, то sequencer переходит в состояние паузы, и следующий скрипт будет выполняться только после установки свойства playing в значение true. В случае, если результатом выполнения скрипта является булевское значение true, следующий скрипт выполняется немедленно. Строковый результат трактуется как событие, по происшествию которого будет выполнен следующий скрипт.
Например, смена одного изображения (img1) другим (img2) через 2 секунды задается следующим образом:
<sequencer playing=”true”>
<script>
2000; // ms
</script>
<script>
img1.show();
img2.show();
</script>
</sequencer>
Показ изображения (img) после окончания воспроизведения анимации (anim) можно задать так:
<sequencer playing=”true”>
<script>
anim. rewindAndPlay();
“anim. onPlayed”;
</script>
<script>
Img1.show();
</script>
</sequencer>
Скрипты выполняются в контексте родительского объекта sequencer’а, однако часто возникает необходимость обратиться к самому sequencer’у. Для этого в скриптах sequencer’а можно использовать ключевое слово this_seq. Оно действует аналогично this. С помощью this_seq можно работать со свойствами sequencer’а, а также управлять его работой.
5.2. Упаковка ЭУМ
С технической точки зрения электронные модули представляют собой контейнер, структурированный и упакованный особым образом для хранения, пересылки, использования различными информационными системами.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 |


