Что такое код swf_actionsettarget

Содержание

Игра «Трон» на Flash (AS 2.0)

Введение

В данном уроке мы с вами сами с «нуля» создадим игру «Трон» на Flash. Данный урок я реализовывал во Flash CS4 с использованием Action Script 2.0.

Ну я думаю, что если у вас CS3 или CS5, то особых проблем не возникнет.

Создание проекта

Создадим отдельную папочку «tron», в ней мы будем хранить все файлы нашей игры (сам файл игры + файлы классов).

Создадим проект: File New. Flash Project. В выпадающем меню выберем «New Project. «:

  • Project name: tron
  • Root folder:
  • ActionScript version: ActionScript 2.0

Далее создадим основной файл игры: кликаем по пиктограмме «New File» в нижней части окна «PROJECT», имя задаем как «index», тип «Flash File», галочу открытия сразу после создания оставляем активной. Итак, окно «PROJECT» у нас сейчас выглядит так:

Зададим настройки нашему главному файлу. Для этого надо кликнуть мышкой при активном инструменте «Selection Tool» на пустом месте рабочей области и в перейти в панель «Properties»:

  • FPS (частота кадров): 24
  • Size (размер сцены): 500 x 500 px.

Небольшое отступление: если я в дальнейшем буду упоминать какую-либо панель или окно и не буду говорить где её найти, то знайте: все панели во Flash находятся в верхнем выпадающем меню «Windows».

Создание объектов

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

  • Игрок 1
  • Игрок 2
  • След игрока 1
  • След игрока 2

Перейдем в библиотеку (окно «Library») и кликнем по пиктограмме «New Symbol. «, имя зададим как «Игрок 1», тип «Movie Clip», кликнем OK, откроется окно создания МувиКлипа. Первый игрок у нас будет синяя мигающая точка, её и создаем:

Выберем инструмент «Oval Tool», нарисуем круг, в панели «Properties» зададим ему настройки:

Теперь сделаем так, чтобы наш круг моргал:

  • Выделим наш круг, вызовем контекстное меню и выберем «Convert to Symbol».
  • Нажмем OK.
  • На панеле «Time Line» встанем в кадр 5 и создадим в нем ключевой кадр-копию (F6).
  • Выделим наш круг, в панели «Properties» в категории «Color Effect» выберем «Alpha» и зададим значение .
  • Кликнем правой кнопкой на кадре 1 и выберем «Copy Frames».
  • Кликнем правой кнопкой на кадре 10 и выберем «Paste Frames».
  • Кликнем правой кнопкой на кадре 1 и выберем «Create Classic Tween».
  • Кликнем правой кнопкой на кадре 5 и выберем «Create Classic Tween».

Панель «Time Line» для МувиКлипа «Игрок 1» у нас выглядит так:

Вернемся к сцене, кликнув по ссылке «Scene 1» (она видна на рисунке выше).

По аналогии сами создайте МувиКлип «Игрок 2», отличие его будет лишь в том, что его цвет будет красным.

Перейдем в библиотеку (окно «Library») и кликнем по пиктограмме «New Symbol. «, имя зададим как «След игрока 1», тип «Movie Clip», кликнем OK, откроется окно создания МувиКлипа. След игрока 1 у нас будет синяя точка, её и создаем:

Выберем инструмент «Rectangle Tool», нарисуем прямоугольник, в панели «Properties» зададим ему настройки:

Вернемся к сцене, кликнув по ссылке «Scene 1».

По аналогии сами создайте МувиКлип «След игрока 2», отличие его будет лишь в том, что его цвет будет красным.

Написание кода

Определим то, что у нас должны «уметь» объекты.

  • Всегда двигаться.
  • Поворачивать по воле пользователя.
  • Оставлять после себя след в виде экземпляра класса след.
  • Реагировать на событие прикосновения к себе кого-нибудь из игроков и заканчивать игру.

Приступим к реализации.

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

Переместим на сцену из библиотеки по одному экземпляру каждого игрока (просто перетищив их мышкой из библиотеки на сцену) и зададим им следующие настрокий в панеле «Properties» (выделяя важдый из них):

  • «Instance Name» для «Игрок 1»: igrok1
  • «Instance Name» для «Игрок 2»: igrok2

Теперь выделим первый кадр на панели Time Line (собственно и единственный) и нажмем F9, откроется панель «Actions» (для программирования в кадре), здесь мы напишем следующий код:

Закроем панель «Actions».

Теперь выделим игрока 1 и нажмем F9, откроется панель «Actions» (для программирования внути объекта), здесь мы напишем следующий код:

Закроем панель «Actions».

Игрок 2 у нас будет рулить уже не стрелочками, а кнопками W-S-A-D (в обработчике события Key.isDown() следует использовать их ASCII код), также его начальное местоположение немного изменится, поэтому для него код будет выглядеть так (вставьте его в игрока 2):

Закроем панель «Actions».

Поздравляю! Теперь вы можете запустить проект (Ctrl + Enter) и увидеть, что оба игрока уже могут управлять своими «Мотоциклами».

Полезное примечание: когда вы находитесьв панеле «Actions» и уже хотите её закрыть (код написан), не поленитесь нажать кнопку в виде синей галочки «Sheck syntax», она попробует найти ошибки в вашем коде и подскажет как их исправить. При нажатии на эту кнопку, если есть ошибки, то они отображаются в панеле «Compilel Errors».

Можно сказать что половина игры написана. Далее мы будем дорабатывать полученное.

Промежуточный результат: скачать .swf (правой кнопкой «сохранить объект по ссылке как. «)

Оставление следа

Теперь нам надо создать сласс следа для одного из игроков. Откроем окно «Project» (Window Other Panels Project) и создадим новый класс, кликнув по пиктограмме «Create Class«. Зададим классу имя «Sled1» и кликнем «Create class«.

Перед нами файл, описывающий класс следа для игрока 1. Изменим его следующим образом:

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

Далее мы создадим еще один класс, он будет хранить все наши следы игрока 1. Т.е. в нем мы заведем массив, в котором будут храниться наши следы. Также в этом классе мы предусмотрим функцию, которая будет добавлять следы игрока 1. Для этого снова в панели «Project» создадим новый класс, который назовем «MassivSled1«. Выглядеть он у нас будет следующим образом:

Теперь в пером кадре добавим несколько строк кода, инициирующих появение класса следов 1:

Нам надо добавлять появление следа после каждого движения игрока 1. Для этого в код игрока 1 добавим следующее:

Весь алгоритм оставления следа мы с вами проработали. По аналогии сами реализуйте оставление следа игроком 2. Примите во внимание, что переменная «i1«, созданная для определения идентификатора каждого следа игрока 1, началась с нуля и увеличивается при каждом следе. Поэтому стоит переменную «i2» (для следа игрока 2) создать и сразу приравнять не к нулю, а к 100000, к примеру.

Промежуточный результат: скачать .swf (правой кнопкой «сохранить объект по ссылке как. «)

Ограничение для игроков

Нам нужно ограничить игрока в передвижении. А именно: если игрок двигется вперед, то нам надо запретить ему двигаться назад, даже если он нажал кнопку движения назад. Аналогично со всеми другими сторонами. Зайдем в код игрока 1 (Выделим его и нажмем F9) и немного откорректируем код, создадим небольшие проверки:

Аналогично измените код игрока 2.

Немного интересного (отзеркаливание)

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

Небольшая оптимизация игры

Сейчас наша игра написана немного неправильно. Если вы поиграете в неё 2-3 минуты, то все начнет тормозить. Происходит это из-за того что у нас обьектов (следов) становится очень много и у каждого есть событие «onClipEvent (enterFrame)» — оно очень сильно загружает процессор. Давайте вынесем его в отдельную функцию и будем её вызывать из самих игроков.

Из класса следа это событие удалим полностью:

Аналогично измените класс следа 2.

В первом кадре создадим функцию, которая будет производить проверку:

Осталось вызвать эту функцию из игроков, передав в неё нужные параметры:

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

Ну вот, наша игра стала полегче. Однако, все равно, если долго играть, то она будет «виснуть» — слишком уж много объектов на сцене появляется (следов), а здесь уже дело не в процессоре, а в оперативной памяти. Другими словами: чем больше у пользователей свободной оперативной памяти, тем дольше они смогут играть в игру. Ну ладно — наша с вами задача не оптимизировать игры, а пока что, только научиться их делать.

Проигрыш

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

Давайте в кодах игроков зададим эту самую проверку:

Для второго игрока код будет абсолютно идентичным, пропишите его.

Сообщение о проигрыше

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

Теперь запишем в него сообщение, если кто-то проиграл. Сделать это можно из любого объекта, но правильней это будет сделать из функции, которая проверяет столкновения (находится она у нас в первом кадре):

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

Итоговый результат: скачать .swf (правой кнопкой «сохранить объект по ссылке как. «)

Заключение

На этом мы остановимся. Игра готова, играть можно, а самое главное, можно играть вдвоем и это куда интереснее. Если вы все поняли, то ,я думаю, для вас не составит труда её доработать. Как? Ну например:

  • Сделать очки для каждого игрока: колчество выйгрышей, а после того, как кто-то проиграл надо нажать «Replay», чтобы играть еще раз.
  • Добавить черную дыру, которая бы появлялась на экране, а если игрок в неё попадает то оказывается в каком-либо другом месте (так сказать телепорт).
  • И т.д.

Ну вот и все. Собственно, это все, что я хотел вам рассказать. Если есть какие-то вопросы — готов на них ответить — задавайте.

Понравилась или помогла статья? Самое лучшее, что ты можешь сделать — это поделиться ею в любой из своих соцсетей (даже если ты поделишься в твиттере или google+, которыми ты не пользуешься — это очень поможет развитию моего блога). Спасибо! А если ты еще и оставишь любой комментарий снизу в обсуждениях, то это будет двойное СПАСИБО!

Символы и ActionScript

На этой странице

ActionScript® позволяет управлять символами при исполнении. С помощью ActionScript в FLA-файлах можно создавать интерактивные и другие возможности, которые недоступны при использовании одной только временной шкалы.

Илон Маск рекомендует:  Что такое код imagecreatetruecolor

ActionScript® позволяет управлять символами при исполнении. С помощью ActionScript в FLA-файлах можно создавать интерактивные и другие возможности, которые недоступны при использовании одной только временной шкалы.

См. обсуждение символов и ActionScript в веб-справке, чтобы получить информацию об управлении символами с помощью ActionScript.

Управление экземплярами и символами при помощи сценариев ActionScript

Сценарии ActionScript позволяют управлять экземплярами фрагментов ролика и кнопок®. Для доступа из сценария ActionScript экземпляр фрагмента ролика или кнопки должен иметь уникальное имя. Сценарий ActionScript можно написать самостоятельно или использовать предварительно заданные поведения в Animate.

Дополнительные сведения см. в разделе Обработка событий в руководстве разработчика ActionScript 3.0.

Управление экземплярами с помощью вариантов поведения

В FLA-файлах, в настройках публикации которых выбрано значение «ActionScript 2.0», для управления экземплярами фрагмента ролика или графики в документе могут использоваться не сценарии ActionScript, а варианты поведения. Варианты поведения представляют собой заранее написанные сценарии на языке ActionScript, которые позволяют вводить в документ исходный текст ActionScript без его самостоятельного написания. Варианты поведения в ActionScript 3.0 не реализованы.

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

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

Варианты поведения, имеющиеся в Animate, приведены в следующей таблице.

Загрузка графического объекта

Загружает внешний JPEG-файл в экран или во фрагмент ролика.

Путь и имя файла JPEG-файла.

Имя экрана или экземпляра фрагмента ролика, получателя графического объекта.

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

Загружает внешний SWF-файл в экран или в целевой фрагмент ролика.

URL-адрес внешнего SWF-файла.

Имя экрана или экземпляра фрагмента ролика, получателя SWF-файла.

Создать дубликат фрагмента ролика

Дублирует экран или фрагмент ролика.

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

Смещение копии по осям Х и Y в пикселах от исходного экземпляра.

Перейти к указанному кадру или метке и начать воспроизведение

Воспроизводит фрагмент ролика начиная с определенного кадра.

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

Номер или метка кадра для воспроизведения.

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

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

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

Номер или метка кадра для остановки.

На передний план

Переносит экран или целевой фрагмент ролика на вершину списка.

Имя экрана или экземпляра фрагмента ролика.

Переносит экрана или целевой фрагмент ролика в списке на одну позицию вверх.

Имя экрана или экземпляра фрагмента ролика.

Отправляет целевой фрагмент ролика в конец списка.

Имя экрана или экземпляра фрагмента ролика.

Переносит экран или целевой фрагмент ролика на одну позицию вниз в списке.

Имя экрана или экземпляра фрагмента ролика.

Начать перетаскивание фрагмента ролика

Начинает перетаскивать фрагмент ролика.

Имя экрана или экземпляра фрагмента ролика.

Остановить перетаскивание фрагмента ролика

Останавливает текущее перетаскивание.

Выгрузка фрагмента ролика

Удаляет из проигрывателя Flash Player фрагмент ролика, который был загружен методом loadMovie().

Имя экземпляра фрагмента ролика.

Создание и настройка поведения

Убедитесь, что для текущего FLA-файла в параметрах публикации задана поддержка «ActionScript 2.0» или более ранней версии.

Делегирование событий

Всплытие и перехват событий позволяет реализовать один из самых важных приёмов разработки – делегирование.

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

Из него можно получить целевой элемент event.target , понять на каком именно потомке произошло событие и обработать его.

Рассмотрим пример – диаграмму Ба-Гуа. Это таблица, отражающая древнюю китайскую философию.

Её HTML (схематично):

В этой таблице всего 9 ячеек, но могло бы быть и 99, и даже 9999, не важно.

Наша задача – реализовать подсветку ячейки

при клике.

Вместо того, чтобы назначать обработчик onclick для каждой ячейки

(их может быть очень много) – мы повесим «единый» обработчик на элемент .

Он будет использовать event.target , чтобы получить элемент, на котором произошло событие, и подсветить его.

Код будет таким:

Такому коду нет разницы, сколько ячеек в таблице. Мы можем добавлять, удалять

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

Однако, у текущей версии кода есть недостаток.

Клик может быть не на теге

, а внутри него.

В нашем случае, если взглянуть на HTML-код таблицы внимательно, видно, что ячейка

содержит вложенные теги, например :

Естественно, если клик произойдёт на элементе , то он станет значением event.target .

Внутри обработчика table.onclick мы должны по event.target разобраться, был клик внутри

или нет.

Вот улучшенный код:

  1. Метод elem.closest(selector) возвращает ближайшего предка, соответствующего селектору. В данном случае нам нужен
, находящийся выше по дереву от исходного элемента.
  • Если event.target не содержится внутри элемента
  • , то вызов вернёт null , и ничего не произойдёт.
  • Если таблицы вложенные, event.target может содержать элемент
  • , находящийся вне текущей таблицы. В таких случаях мы должны проверить действительно ли это нашей таблицы.
  • И если это так, то подсвечиваем его.
  • В итоге мы получили короткий код подсветки, быстрый и эффективный, которому совершенно не важно, сколько всего в таблице

    .

    Применение делегирования: действия в разметке

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

    Например, нам нужно сделать меню с разными кнопками: «Сохранить (save)», «Загрузить (load)», «Поиск (search)» и т.д. И есть объект с соответствующими методами save , load , search … Как их состыковать?

    Первое, что может прийти в голову – это найти каждую кнопку и назначить ей свой обработчик среди методов объекта. Но существует более элегантное решение. Мы можем добавить один обработчик для всего меню и атрибуты data-action для каждой кнопки в соответствии с методами, которые они вызывают:

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

    Cocoa Application Competencies for iOS

    Retired Document

    Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid.

    Target-Action

    Target-action is a design pattern in which an object holds the information necessary to send a message to another object when an event occurs. The stored information consists of two items of data: an action selector, which identifies the method to be invoked, and a target, which is the object to receive the message. The message sent when the event occurs is called an action message. Although the target can be any object, even a framework object, it is typically a custom controller that handles the action message in an application-specific way.

    The event triggering an action message can be anything, just as the object sending the message can be any object. For example, a gesture-recognizer object might send an action message to another object when it recognizes its gesture. However, the target-action paradigm is most commonly found with controls such as buttons and sliders. When a user manipulates a control object, it sends the message to the specified object. The control object is an instance of a subclass of UIControl (iOS) or NSControl (OS X). Both action selector and target object are properties of a control object or, in the AppKit framework, properties of the control’s cell object.

    An Action Method Must Have a Certain Form

    Action methods must have a conventional signature. The UIKit framework permits some variation of signature, but both platforms accept action methods with a signature similar to the following:

    The type qualifier IBAction , which is used in place of the void return type, flags the declared method as an action so that Interface Builder is aware of it. For an action method to appear in Interface Builder, you first must declare it in a header file of the class whose instance is to receive the action message.

    The sender parameter is the control object sending the action message. When responding to an action message, you may query sender to get more information about the context of the event triggering the action message.

    You Can Set Target and Action in Code or Using the Tools

    You can set the action and target of a control (or cell) object programmatically or in Interface Builder. Setting these properties effectively connects the control and its target via the action. If you connect a control and its target in Interface builder, the connection is archived in a nib file. When an application later loads the nib file, the connection is restored.

    You may set the target of an action message to nil . In this case, the application determines the target at runtime; it sends an action message first to the first responder and from there it goes up the responder chain until it is handled (if at all).

    Target-Action is Different in iOS and OS X

    Although conceptually the target-action design pattern is the same for both frameworks, UIKit and AppKit implement it differently:

    In UIKit, a control maps a target and action to one or more multitouch events that can occur on the control.

    UIKit allows several different signatures for action methods. For example, the following signature is permissible:

    AppKit uses the control-cell architecture for implementing target-action for most (but not all) controls. In this architecture, a control “owns” one or more lighter-weight cell objects, and the cell holds the target and action properties for its control. When the user clicks or otherwise activates a control, it extracts this information from its cell and sends the action message.

    Что такое код swf_actionsettarget

    Код HTML для вставки флеш мы можем создать сами.

    Для этого ссылка должна быть « прямой » (заканчиваться на типичное расширение флеш-файлов * .swf )
    Просто копируем адрес файла и ставим в код вместо » ссылка-на-файл «:

    Теперь ещё раз по порядку.

    1) Копируем вот этот код:

    2) Открывем окно создания темы и нажимаем на значок HTML .

    Это тот же значок, который вы нажимаете при вставке видео.

    3) В открывшиеся окно вставляем скопированный код.

    4) Заменяем слова « ссылка на файл » 2 раза на ссылку на флеш.

    Моя флешка находится по адресу http://www.pineapple.ru/farb/bufa_boo.swf

    Я его взяла из адресной строки браузера, но могут быть и ещё варианты.

    5) Обращаю ваше внимание, что в коде HTML присутствуют цифры.

    В данном коде это 450 и 300 . Их тоже можно заменить, для того, чтобы увеличить или уменьшить размеры флешки.

    Внимание: Умножайте или делите на один коэффициент, а то нарушите пропорции.

    6) Далее, нажимаем кнопку « Обновить «.

    Получаем жёлтый прямоугольник. Вот это и есть наша флешка.

    7) Если ничего больше вставить не нужно (текст или картинку), то нажимаем « Опубликовать «.

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

    И ещё: Скопируйте себе этот код HTML в Word или » Блокнот » и сохраните, чтобы потом долго не искать.

    Или можете скачать этот код, сохранённый с расширением txt ЗДЕСЬ.

    Вот что получилось.

    Для запуска флешки нажмите GO.

    Делегирование событий

    Всплытие и перехват событий позволяет реализовать один из самых важных приёмов разработки – делегирование.

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

    Из него можно получить целевой элемент event.target , понять на каком именно потомке произошло событие и обработать его.

    Рассмотрим пример – диаграмму Ба-Гуа. Это таблица, отражающая древнюю китайскую философию.

    Её HTML (схематично):

    В этой таблице всего 9 ячеек, но могло бы быть и 99, и даже 9999, не важно.

    Наша задача – реализовать подсветку ячейки

    при клике.

    Вместо того, чтобы назначать обработчик onclick для каждой ячейки

    (их может быть очень много) – мы повесим «единый» обработчик на элемент .

    Он будет использовать event.target , чтобы получить элемент, на котором произошло событие, и подсветить его.

    Код будет таким:

    Такому коду нет разницы, сколько ячеек в таблице. Мы можем добавлять, удалять

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

    Однако, у текущей версии кода есть недостаток.

    Клик может быть не на теге

    , а внутри него.

    В нашем случае, если взглянуть на HTML-код таблицы внимательно, видно, что ячейка

    содержит вложенные теги, например :

    Естественно, если клик произойдёт на элементе , то он станет значением event.target .

    Внутри обработчика table.onclick мы должны по event.target разобраться, был клик внутри

    или нет.

    Вот улучшенный код:

    1. Метод elem.closest(selector) возвращает ближайшего предка, соответствующего селектору. В данном случае нам нужен
    , находящийся выше по дереву от исходного элемента.
  • Если event.target не содержится внутри элемента
  • , то вызов вернёт null , и ничего не произойдёт.
  • Если таблицы вложенные, event.target может содержать элемент
  • , находящийся вне текущей таблицы. В таких случаях мы должны проверить действительно ли это нашей таблицы.
  • И если это так, то подсвечиваем его.
  • В итоге мы получили короткий код подсветки, быстрый и эффективный, которому совершенно не важно, сколько всего в таблице

    .

    Применение делегирования: действия в разметке

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

    Например, нам нужно сделать меню с разными кнопками: «Сохранить (save)», «Загрузить (load)», «Поиск (search)» и т.д. И есть объект с соответствующими методами save , load , search … Как их состыковать?

    Первое, что может прийти в голову – это найти каждую кнопку и назначить ей свой обработчик среди методов объекта. Но существует более элегантное решение. Мы можем добавить один обработчик для всего меню и атрибуты data-action для каждой кнопки в соответствии с методами, которые они вызывают:

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

    Cocoa Application Competencies for iOS

    Retired Document

    Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid.

    Target-Action

    Target-action is a design pattern in which an object holds the information necessary to send a message to another object when an event occurs. The stored information consists of two items of data: an action selector, which identifies the method to be invoked, and a target, which is the object to receive the message. The message sent when the event occurs is called an action message. Although the target can be any object, even a framework object, it is typically a custom controller that handles the action message in an application-specific way.

    The event triggering an action message can be anything, just as the object sending the message can be any object. For example, a gesture-recognizer object might send an action message to another object when it recognizes its gesture. However, the target-action paradigm is most commonly found with controls such as buttons and sliders. When a user manipulates a control object, it sends the message to the specified object. The control object is an instance of a subclass of UIControl (iOS) or NSControl (OS X). Both action selector and target object are properties of a control object or, in the AppKit framework, properties of the control’s cell object.

    An Action Method Must Have a Certain Form

    Action methods must have a conventional signature. The UIKit framework permits some variation of signature, but both platforms accept action methods with a signature similar to the following:

    The type qualifier IBAction , which is used in place of the void return type, flags the declared method as an action so that Interface Builder is aware of it. For an action method to appear in Interface Builder, you first must declare it in a header file of the class whose instance is to receive the action message.

    The sender parameter is the control object sending the action message. When responding to an action message, you may query sender to get more information about the context of the event triggering the action message.

    You Can Set Target and Action in Code or Using the Tools

    You can set the action and target of a control (or cell) object programmatically or in Interface Builder. Setting these properties effectively connects the control and its target via the action. If you connect a control and its target in Interface builder, the connection is archived in a nib file. When an application later loads the nib file, the connection is restored.

    You may set the target of an action message to nil . In this case, the application determines the target at runtime; it sends an action message first to the first responder and from there it goes up the responder chain until it is handled (if at all).

    Target-Action is Different in iOS and OS X

    Although conceptually the target-action design pattern is the same for both frameworks, UIKit and AppKit implement it differently:

    In UIKit, a control maps a target and action to one or more multitouch events that can occur on the control.

    UIKit allows several different signatures for action methods. For example, the following signature is permissible:

    AppKit uses the control-cell architecture for implementing target-action for most (but not all) controls. In this architecture, a control “owns” one or more lighter-weight cell objects, and the cell holds the target and action properties for its control. When the user clicks or otherwise activates a control, it extracts this information from its cell and sends the action message.

    Игра «Трон» на Flash (AS 2.0)

    Введение

    В данном уроке мы с вами сами с «нуля» создадим игру «Трон» на Flash. Данный урок я реализовывал во Flash CS4 с использованием Action Script 2.0.

    Ну я думаю, что если у вас CS3 или CS5, то особых проблем не возникнет.

    Создание проекта

    Создадим отдельную папочку «tron», в ней мы будем хранить все файлы нашей игры (сам файл игры + файлы классов).

    Создадим проект: File New. Flash Project. В выпадающем меню выберем «New Project. «:

    • Project name: tron
    • Root folder:
    • ActionScript version: ActionScript 2.0

    Далее создадим основной файл игры: кликаем по пиктограмме «New File» в нижней части окна «PROJECT», имя задаем как «index», тип «Flash File», галочу открытия сразу после создания оставляем активной. Итак, окно «PROJECT» у нас сейчас выглядит так:

    Зададим настройки нашему главному файлу. Для этого надо кликнуть мышкой при активном инструменте «Selection Tool» на пустом месте рабочей области и в перейти в панель «Properties»:

    • FPS (частота кадров): 24
    • Size (размер сцены): 500 x 500 px.

    Небольшое отступление: если я в дальнейшем буду упоминать какую-либо панель или окно и не буду говорить где её найти, то знайте: все панели во Flash находятся в верхнем выпадающем меню «Windows».

    Создание объектов

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

    • Игрок 1
    • Игрок 2
    • След игрока 1
    • След игрока 2

    Перейдем в библиотеку (окно «Library») и кликнем по пиктограмме «New Symbol. «, имя зададим как «Игрок 1», тип «Movie Clip», кликнем OK, откроется окно создания МувиКлипа. Первый игрок у нас будет синяя мигающая точка, её и создаем:

    Выберем инструмент «Oval Tool», нарисуем круг, в панели «Properties» зададим ему настройки:

    Теперь сделаем так, чтобы наш круг моргал:

    • Выделим наш круг, вызовем контекстное меню и выберем «Convert to Symbol».
    • Нажмем OK.
    • На панеле «Time Line» встанем в кадр 5 и создадим в нем ключевой кадр-копию (F6).
    • Выделим наш круг, в панели «Properties» в категории «Color Effect» выберем «Alpha» и зададим значение .
    • Кликнем правой кнопкой на кадре 1 и выберем «Copy Frames».
    • Кликнем правой кнопкой на кадре 10 и выберем «Paste Frames».
    • Кликнем правой кнопкой на кадре 1 и выберем «Create Classic Tween».
    • Кликнем правой кнопкой на кадре 5 и выберем «Create Classic Tween».

    Панель «Time Line» для МувиКлипа «Игрок 1» у нас выглядит так:

    Вернемся к сцене, кликнув по ссылке «Scene 1» (она видна на рисунке выше).

    По аналогии сами создайте МувиКлип «Игрок 2», отличие его будет лишь в том, что его цвет будет красным.

    Перейдем в библиотеку (окно «Library») и кликнем по пиктограмме «New Symbol. «, имя зададим как «След игрока 1», тип «Movie Clip», кликнем OK, откроется окно создания МувиКлипа. След игрока 1 у нас будет синяя точка, её и создаем:

    Выберем инструмент «Rectangle Tool», нарисуем прямоугольник, в панели «Properties» зададим ему настройки:

    Вернемся к сцене, кликнув по ссылке «Scene 1».

    По аналогии сами создайте МувиКлип «След игрока 2», отличие его будет лишь в том, что его цвет будет красным.

    Написание кода

    Определим то, что у нас должны «уметь» объекты.

    • Всегда двигаться.
    • Поворачивать по воле пользователя.
    • Оставлять после себя след в виде экземпляра класса след.
    • Реагировать на событие прикосновения к себе кого-нибудь из игроков и заканчивать игру.

    Приступим к реализации.

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

    Переместим на сцену из библиотеки по одному экземпляру каждого игрока (просто перетищив их мышкой из библиотеки на сцену) и зададим им следующие настрокий в панеле «Properties» (выделяя важдый из них):

    • «Instance Name» для «Игрок 1»: igrok1
    • «Instance Name» для «Игрок 2»: igrok2

    Теперь выделим первый кадр на панели Time Line (собственно и единственный) и нажмем F9, откроется панель «Actions» (для программирования в кадре), здесь мы напишем следующий код:

    Закроем панель «Actions».

    Теперь выделим игрока 1 и нажмем F9, откроется панель «Actions» (для программирования внути объекта), здесь мы напишем следующий код:

    Закроем панель «Actions».

    Игрок 2 у нас будет рулить уже не стрелочками, а кнопками W-S-A-D (в обработчике события Key.isDown() следует использовать их ASCII код), также его начальное местоположение немного изменится, поэтому для него код будет выглядеть так (вставьте его в игрока 2):

    Закроем панель «Actions».

    Поздравляю! Теперь вы можете запустить проект (Ctrl + Enter) и увидеть, что оба игрока уже могут управлять своими «Мотоциклами».

    Полезное примечание: когда вы находитесьв панеле «Actions» и уже хотите её закрыть (код написан), не поленитесь нажать кнопку в виде синей галочки «Sheck syntax», она попробует найти ошибки в вашем коде и подскажет как их исправить. При нажатии на эту кнопку, если есть ошибки, то они отображаются в панеле «Compilel Errors».

    Можно сказать что половина игры написана. Далее мы будем дорабатывать полученное.

    Промежуточный результат: скачать .swf (правой кнопкой «сохранить объект по ссылке как. «)

    Оставление следа

    Теперь нам надо создать сласс следа для одного из игроков. Откроем окно «Project» (Window Other Panels Project) и создадим новый класс, кликнув по пиктограмме «Create Class«. Зададим классу имя «Sled1» и кликнем «Create class«.

    Перед нами файл, описывающий класс следа для игрока 1. Изменим его следующим образом:

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

    Далее мы создадим еще один класс, он будет хранить все наши следы игрока 1. Т.е. в нем мы заведем массив, в котором будут храниться наши следы. Также в этом классе мы предусмотрим функцию, которая будет добавлять следы игрока 1. Для этого снова в панели «Project» создадим новый класс, который назовем «MassivSled1«. Выглядеть он у нас будет следующим образом:

    Теперь в пером кадре добавим несколько строк кода, инициирующих появение класса следов 1:

    Нам надо добавлять появление следа после каждого движения игрока 1. Для этого в код игрока 1 добавим следующее:

    Весь алгоритм оставления следа мы с вами проработали. По аналогии сами реализуйте оставление следа игроком 2. Примите во внимание, что переменная «i1«, созданная для определения идентификатора каждого следа игрока 1, началась с нуля и увеличивается при каждом следе. Поэтому стоит переменную «i2» (для следа игрока 2) создать и сразу приравнять не к нулю, а к 100000, к примеру.

    Промежуточный результат: скачать .swf (правой кнопкой «сохранить объект по ссылке как. «)

    Ограничение для игроков

    Нам нужно ограничить игрока в передвижении. А именно: если игрок двигется вперед, то нам надо запретить ему двигаться назад, даже если он нажал кнопку движения назад. Аналогично со всеми другими сторонами. Зайдем в код игрока 1 (Выделим его и нажмем F9) и немного откорректируем код, создадим небольшие проверки:

    Аналогично измените код игрока 2.

    Немного интересного (отзеркаливание)

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

    Небольшая оптимизация игры

    Сейчас наша игра написана немного неправильно. Если вы поиграете в неё 2-3 минуты, то все начнет тормозить. Происходит это из-за того что у нас обьектов (следов) становится очень много и у каждого есть событие «onClipEvent (enterFrame)» — оно очень сильно загружает процессор. Давайте вынесем его в отдельную функцию и будем её вызывать из самих игроков.

    Из класса следа это событие удалим полностью:

    Аналогично измените класс следа 2.

    В первом кадре создадим функцию, которая будет производить проверку:

    Осталось вызвать эту функцию из игроков, передав в неё нужные параметры:

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

    Ну вот, наша игра стала полегче. Однако, все равно, если долго играть, то она будет «виснуть» — слишком уж много объектов на сцене появляется (следов), а здесь уже дело не в процессоре, а в оперативной памяти. Другими словами: чем больше у пользователей свободной оперативной памяти, тем дольше они смогут играть в игру. Ну ладно — наша с вами задача не оптимизировать игры, а пока что, только научиться их делать.

    Проигрыш

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

    Давайте в кодах игроков зададим эту самую проверку:

    Для второго игрока код будет абсолютно идентичным, пропишите его.

    Сообщение о проигрыше

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

    Теперь запишем в него сообщение, если кто-то проиграл. Сделать это можно из любого объекта, но правильней это будет сделать из функции, которая проверяет столкновения (находится она у нас в первом кадре):

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

    Итоговый результат: скачать .swf (правой кнопкой «сохранить объект по ссылке как. «)

    Заключение

    На этом мы остановимся. Игра готова, играть можно, а самое главное, можно играть вдвоем и это куда интереснее. Если вы все поняли, то ,я думаю, для вас не составит труда её доработать. Как? Ну например:

    • Сделать очки для каждого игрока: колчество выйгрышей, а после того, как кто-то проиграл надо нажать «Replay», чтобы играть еще раз.
    • Добавить черную дыру, которая бы появлялась на экране, а если игрок в неё попадает то оказывается в каком-либо другом месте (так сказать телепорт).
    • И т.д.

    Ну вот и все. Собственно, это все, что я хотел вам рассказать. Если есть какие-то вопросы — готов на них ответить — задавайте.

    Понравилась или помогла статья? Самое лучшее, что ты можешь сделать — это поделиться ею в любой из своих соцсетей (даже если ты поделишься в твиттере или google+, которыми ты не пользуешься — это очень поможет развитию моего блога). Спасибо! А если ты еще и оставишь любой комментарий снизу в обсуждениях, то это будет двойное СПАСИБО!

    Справочник по Flash : ActionScript : Action : loadMovie — Загрузить файл .swf

    Материал из WebWikiABCD

    loadMovie

    Позволяет загрузить в проигрыватель файл .swf.

    Синтаксис:

    Аргументы:

    Описание:

    Функция loadMovie() импортирует во Flash Player файл .swf, размещенный по адресу URL.

    Если target является ссылкой на существующий клип или строкой, задающей путь к клипу, загруженный файл .swf будет помещен в указанный клип (вызывая удаление предшествующего содержимого). Чтобы загрузить фильм в текущий клип, используйте в качестве параметра target пустую строку:

    Если target является ссылкой на существующий уровень документа (например, _level2) или строкой, указывающей путь к уровню документа (например, «_level2»), то файл .swf помещается на указанный уровень документа. Загрузка фильма на уровень _level0 очищает проигрыватель от всего содержимого и помещает новый файл .swf на уровень _level0.

    Можно посылать переменные вместе с вызовом loadMovie(), и тогда URL обычно является адресом сценария, возвращающего файл .swf, соответствующий переданным переменным. Чтобы отправить переменные при вызове loadMovie(), включается аргумент method (заданный в «GET» или «POST»). «GET» посылает переменные временной диаграммы текущего клипа в виде строки запроса, присоединенный к URL сценария. «POST» посылает переменные временной диаграммы текущего клипа после заголовка HTTP для запроса POST. Метод «POST» недоступен в автономном Flash Player. Поскольку у большинства веб-серверов длина URL ограничена величиной от 255 до 1024 символов, для передачи больших объемов данных используйте «POST», а не «GET».

    Вызовы loadMovie() над веб-сервером, использующие метод «GET», могут передавать переменные в загруженный фильм без вмешательства сценария.

    Например, загрузим внешний фильм myMovie.swf на уровень 1 стека документов проигрывателя, передав ему переменные текущей временной диаграммы:

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

    Некоторые особенности:

    Будьте осторожны при использовании ссылок на клипы и уровни в качестве аргумента target функции loadMovie(). Если аргумент target дает значение undefined, то функция loadMovie() использует в качестве target текущую временную диаграмму.

    Аналогично, ссылки target, дающие пустую строку, заставляют loadMovie() действовать над текущей временной диаграммой. В частности, этим вызываются проблемы при загрузке фильмов на новые незанятые уровни.

    Рассмотрим следующий код:

    Если до выполнения этого предложения объект _level1 не существовал, то этот код загрузит файл myMovie.swf во временную диаграмму, содержавшую предложение loadMovie(), а не на _level1! Чтобы избежать этой проблемы, вместо loadMovie() можно использовать loadMovieNum(). Кроме того, можно указать строку в качестве параметра target для loadMovie():

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

    Использование загруженного swf, как класса

    Добрый день!
    В принципе, мне во многом удалось разобраться в AS3.0 но не могу найти ответ на следующий вопрос:

    Мы можем добавлять на сцену созданные символы movieclip неоднократно в процессе выполнения программы (предварительно созданные и экспортированные для использования в AS), путем создания новых экземпляров их класса:

    В результате выполнения этой части кода, на сцену будет добавлено 10 мувиклипов MovieClip1 и будут расположены в ряд.

    А мне требуется вот что:

    Есть движок игры, допустим тетрис, периодически я меняю внешний вид кубиков (клетки фигур), и чтобы не менять постоянно из-за этого сам движок, я делаю загрузку кубиков с внешнего url. Загружается все нормально (через new Loader()) но загруженный swf могу добавить на сцену только один раз (вернее я могу добавить его, удалить и пр., но не могу добавить два раза в разные места), как можно использовать загруженный swf неоднократно, как при создании новых экземпляров классов символов.

    ActionScript 3

    Здесь loader это мувиклип, загруженный, полагаю сделать на его основе класс не получится, если другой переменной присвоить значение loader, то она откроет доступ все к тому же мувиклипу, а не создаст новую копию.

    Добавлено через 49 минут
    Вроде бы частично решил проблему, конечно хотелось бы не так, но работает:

    создать мувиклип в библиотеке стандартным образом а в его коде прописать:

    ActionScript 3

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

    ActionScript 3
    ActionScript 3
    01.02.2015, 14:31

    Каким образом из загруженного swf передать команду прелоадеру на загрузку другого swf?
    День добрый. Есть внешний прелоадер, который загружает swf файлы содержащие разные уровни игры. В.

    Как запретить перелистывание для загруженного swf?
    Ребята, нужна ваша помощь. Вот есть код перелистывания для андроид-приложения: .

    Использование данных из FlashVars в загружаемом swf
    У меня через хтмл оболочку передаются во флэш некоторые данные (FlashVars) а именно ключ доступа к.

    Как презентации SWF флэш сайта перевести в HTML5 с сохранением эфектов ) Как правильно и полноценно Перевести SWF в HTML5
    программа Sothink SWF Decompiler конвертирует SWF файл в HTML5 разбивая его на HTML и JS . но она.

    01.02.2015, 17:22 2
    03.02.2015, 22:09 [ТС] 3

    И как это должно помочь getDefinitionByName()? Согласно справки Адоб, ей передается имя класса, а возвращает она ссылку на объект.

    Может быть я неправильно изложил вопрос, в двух словах:

    предположим, не важно как мы получили объект, он есть у нас в переменной Obj. Как мне не обращаясь к библиотеке и не загружая со стороны, в переменной Obj2 получить такой же, но не этот же(!) объект, чтобы я мог Obj поместить в одно место на сцене, а Obj2 в другое. Т.е. в Obj2 получить новый экземпляр, того же класса, экземпляром которого является Obj. Если есть возможность — кусок кода приведите.

    03.02.2015, 22:27 4

    Любой объект — это экземпляр некоего класса. getDefinitionByName дает возможность получить ссылку на класс (а занчит и создать любое количество экземпляров) по имени класса (строка).
    Т.е. вы можете загрузить нужные классы, поместить их в некое хранилище, откуда будете создавать нужное вам количество нужных вам экземпляров класса.

    А пример есть по ссылке выше.

    03.02.2015, 22:27
    03.02.2015, 23:06 [ТС] 5

    Вы что, тут круглосуточно сидите ? ))))

    Добавлено через 35 минут
    Я досконально изучил справку по Вашей ссылке.

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

    У меня проблем не возникает в использовании класса flash.display.Loader из примера выше и создания любого количества экземпляров, только экземпляр класса Loader() не является мувиком (вернее является, но пустым).

    У меня есть объект loader (из примера выше), он является экземпляром класса flash.display.Loader и он стал нужным мне мувиком после выполнения метода .load(request).

    Если я создам переменную являющейся ссылкой на класс (методом getDefinitionByName(«flash.display.Loader») или getDefinitionByName(getQualifiedClassName(loader) или просто new Loader(), что тоже самое), согласен, что я смогу создать нужное количество экземпляров этого же класса (Loader) только нужных мне мувиков я не получу, ибо чтобы в этих объектах появилось тоже самое что и в loader мне нужно будет на каждом вызвать метод .load(request) — соответственно в каждый загрузить из того же источника (внешнего) по клипу.

    Вот пример, к дополнению к примеру выше, что я дописал в своем скрипте:

    Илон Маск рекомендует:  Как убрать пунктирную рамку вокруг ссылок
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL