воскресенье, 18 июля 2010 г.

Определения нахождения мыши над сценой в AS2 (аналог MOUSE_LEAVE)

Для старого проекта написанного на ActionScript2 понадобилось определять находится ли мышь над флешкой или уже покинула область flash.
В AS2 нет аналога Event.MOUSE_LEAVE и после поиска в интернете нашлось более-менее универсальное рабочее решение, оно не всегда работает корректно (например если мышь резко останавливается за несколько пикселей до границ флешки), но это наилучшее решение.

Также в ActionScript 2 в полноэкранном режиме (fullscreen mode) не получится определить движение мыши с помощью onMouseMove, поэтому если вы хотите определять изменение положения мыши, то придется сравнивать координаты мыши в каждом фрейме.

Код для определения нахождения мыши над сценой:

var mouse_dx:Number = _xmouse;
var mouse_dy:Number = _ymouse;
var mouseSpeed:Number = 1;

function checkPosition(Void):Void
{
    if (_xmouse<mouseSpeed || _xmouse>(Stage.width-mouseSpeed)
     || _ymouse<mouseSpeed || _ymouse>(Stage.height-mouseSpeed))
    {
        trace("out");
    }
    else
    {
        trace("in");
    }
}
checkPosition(Void);

var mouseListener:Object = new Object();
mouseListener.onMouseMove = function():Void
{
    mouse_dx = Math.abs(mouse_dx - _xmouse);
    mouse_dy = Math.abs(mouse_dy - _ymouse);

    mouseSpeed = mouse_dx > mouse_dy ? mouse_dx : mouse_dy;
    mouseSpeed += 1;

    checkPosition(Void);

    mouse_dx = _xmouse;
    mouse_dy = _ymouse;
}
Mouse.addListener(mouseListener);

четверг, 8 июля 2010 г.

Контейнер Вконтакта и работа компонент во флеше

Vkontakte logo

Понадобилось использовать контейнер для приложения vkontakte (т.к. некоторые матоды работают только из контейнера) и столкнулся с тем что перестал адекватно работать самописный скроллер.

В процессе поиска нашел решение в FAQ Вконтакта и хотя там написано: "При использовании контейнера стандартные компоненты флеша работают некорректно. Как это исправить?" - этот метод подошел и мне, хотя это был не стандартный компонент.
Так что при глюках советую сначала попробовать решение проблемы с flash-компонентами от Святослава Лисина:

addEventListener( Event.ADDED_TO_STAGE, onAddedToStage );
function onAddedToStage(e: Event): void
{
   Security.allowDomain("*");
   stage.dispatchEvent(new Event(Event.DEACTIVATE));
   stage.dispatchEvent(new Event(Event.ACTIVATE));
}

PS
Бонус - опытным путем, после некоторого количества поиска решения было выяснено, что продвинутый загрузчик фотографий vkontakte не загружает картинки если одна из сторон меньше 60px (примерно), при этом никаких пояснений не выдается и нигде не описывается.

вторник, 13 апреля 2010 г.

Realaxy ActionScript Editor beta и будущее программирования

Realaxy ActionScript Editor будет впервые представлен публике на конференции Creative Future в Москве, 23 апреля, по адресу ул. Новый Арбат 24 (кинотеатр Октябрь).
11:45—12:45 «Новое поколение редакторов: Realaxy ActionScript Editor глазами создателей.» Выездной подкаст. Евгений Потапенко, Иван Дембицкий, Зал №8

Тезисы:
Мир меняется или почему дизайнеру будет проще начать программировать Flash проекты самому.
Что такое умный редактор кода.
Интерфейс vs текст - вспоминаем Normal Mode во Flash.
Ранняя диагностика ошибок и чем это грозит тараканам.
Пишем одно, получаем 10.
Уникальные возможности Realaxy ActionScript Editor - пишем же для себя.
Что такое расширение и специализация языка и зачем это нужно.
Примеры, возможности, демонстрации.

Для сильно умных можем затронуть вопросы:
Meta Programming System, Domain Specific Languages, Language Oriented Programming, ReactionScript, фриланс программирование в Черногории.
Также в программе раздача закрытой бета версии редактора.

Те, кто не попадут на конференцию, но хотят получить закрытую бету, разработчики предлагают опубликовать новость в совем средстве массовой информации и прислать ссылку на нее письмом на адрес ivan.dembicki@gmail.com указав тему письма [betatest].

Тем, кто впервые слышит о Realaxy ActionScript Editor рекомендуем посмотреть серию скринкастов.

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

очень интересное виденье будущего от Ivan Dembicki:

Вообще, в ближайшей перспективе (лет 10) произойдет отрыв языков программирования от их "родных" технологий. Зная AS можно будет писать JS или си-шные проекты и наоборот.

Это мэйнстрим, если хотите. И этот мэйнстрим снесет любого гиганта, стоящего у него на пути. Потому, что цена.
Вы пишете игру и выгоняете под разные платформы и технологии. Цена = X.
Вы пишете игру и портируете и переписываете под разные платформы и технологии. Цена стремится к X*количество технологий.
Перед этим никто, ни Microsoft, ни Apple не устоит, если встанут поперек дороги.

Причины тому есть и очень серьезные:

1. размывание монополии Microsoft на ось.
Если раньше можно было говорить о тотальной монополии Microsoft, то сегодня появились совершенно новые рынки, на которых уже не Microsoft играет ведущую роль. (Пример Apple и iPhone вам в помощь)

2. Даже на родной территории Microsoft его начинают двигать все кому не лень. И тенденция только усиливается. (Пример Google OS и Apple также вам в помощь)

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

А теперь вспомним историю Java.
Разработчики Java изначально делали упор на кроссплатформенности.
Сишники, при виде сравнительных тестов производительности, хохотали до слёз и пророчили скоропостижную смерть или вечное программирование стиральных машин на этом языке.

И что произошло?
Сегодня Java исключительно в верхних позициях (чаще всего на первых) любых рейтингов. Его производительность не вызывает смеха ни у кого, а преимущества с каждым днем оттесняют остальные языки на второй план. (Google по запросу "рейтинг языков программирования" вам в помощь) Несмотря на то, что пользователей Mac и Linux было считанные единицы по сравнению с Microsoft, принцип кроссплатформенности вывел Java на первые позиции.

Но приходят новые времена и встают новые задачи. Кроссплатформенности уже недостаточно. Нужна кросстехнологичность. Это возможно только при использовании трансформации кода.

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

Автокомплитов и рефакторингов уже недостаточно. И недостаточно поддержки разных языков в одном редакторе. Возможность трансформации кода под разные языки и платформы - вот что нужно.

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

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

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

©Ivan Dembicki

понедельник, 16 ноября 2009 г.

Перекрытие мувика и mouseEnabled

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

Тогда нам поможет волшебное свойство mouseEnabled, просто пишем:

top_mc.mouseEnabled = false;

и верхний мувик не мешает нам работать дальше.

среда, 21 октября 2009 г.

Удаления дубликатов из массива на actionscript 3

Наткнулся в интернете на код на actionscript 3, позволяющий удалять повторяющиеся значений из массива (код удаляет все найденные дубликаты, трипликаты и тд).
Код полезен и интересен тем, что показывается использование довольно новой функции array.some(), но недостатком является то, что не зная эту функцию сложно понять его работу. Этот же код можно переписать более просто и понятно.

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

Код для удаления дубликатов из массива на actionscript3 для flash

package
{
  import flash.display.Sprite;

  /**
   * ...
   * @author andrew
   */

  public class Test extends Sprite
  {
    public function Test()
    {
      var originalArray:Array = new Array("yellow", "red", "blue", "red", "yellow", "green", "yellow", "purple", "ginger", "red", "blue");
      var dedupedArray:Array = new Array();

      function ArrayProcess()
      {
        for each (var item:String in originalArray)
        {
          if (dedupedArray.indexOf(item)===-1)
          {
            dedupedArray.push(item);
          }
        }
        trace("dedupedArray: "+dedupedArray);
      }

      ArrayProcess();
    }
  }
}