Показаны сообщения с ярлыком actionscript3. Показать все сообщения
Показаны сообщения с ярлыком actionscript3. Показать все сообщения

четверг, 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();
    }
  }
}

воскресенье, 4 октября 2009 г.

Класс на as3 для эффекта волн (ряби)

Не помню уже где нашел в сети скрипт на actionscript 2 для анимации волн (эффект ряби), решил переписать его для as3.
Результат работы можно увидеть ниже.

Для использования надо просто создать мувик с нужной картинкой,
присвоить ему класс asflash.Wave
и поместить его на сцену.
Скорость и направление ряби задается параметром в вызове функции makeWave(-0.1), знак отвечает за направление, значение за скорость волн.


Эффект волн (ряби) на actionscript3 для flash
Класс Wave - Wave.as

package asflash
{
 /**
  * ...
  * @author andrew
  * @web http://as-flash.blogspot.com
 */

 import flash.display.*;
 import flash.geom.*;
 import flash.filters.*;
 import flash.utils.*;
 import flash.events.*;

 public class Wave extends MovieClip
 {
  private var w:Number;
  private var h:Number;

  private var ripple:BitmapData;
  private var ripple3:BitmapData;
  private var ripple2:BitmapData;
  private var ripple1:BitmapData;
  private var gradient:BitmapData;
  private var gradient_mc:BitmapData;

  private var offset3:Point;
  private var offset2:Point;
  private var offset1:Point;

  private var speed1:Number;
  private var speed2:Number;
  private var speed3:Number;

  private var pt:Point;
  private var rect:Rectangle;

  private var dMap:DisplacementMapFilter;

  private var r1pt:Point;
  private var r2pt:Point;
  private var r3pt:Point;
  private var r1rect:Rectangle;
  private var r2rect:Rectangle;
  private var r3rect:Rectangle;
  private var seed:Number;

  public function Wave()
  {
   makeWave(-0.1);
  }

  public function makeWave(str=-0.1)
  {

   w = this.width;
   h = this.height;

   ripple = new flash.display.BitmapData(w, h);
   ripple3 = new flash.display.BitmapData(w, h / 2);
   ripple2 = new flash.display.BitmapData(w, h / 4);
   ripple1 = new flash.display.BitmapData(w, h / 4);
   gradient = new flash.display.BitmapData(ripple.width, ripple.height);
   gradient.draw(gradient, new flash.geom.Matrix(1, 0, 0, 1, 0, 0));

   offset3 = new flash.geom.Point(0, 0);
   offset2 = new flash.geom.Point(0, 0);
   offset1 = new flash.geom.Point(0, 0);
   speed1 = 1*str;
   speed2 = 2*str;
   speed3 = 4*str;
   pt = new flash.geom.Point(0, 0);
   rect = new flash.geom.Rectangle(0, 0, ripple.width, ripple.height);

   this.addEventListener(Event.ENTER_FRAME, showWave);

   r1rect = new flash.geom.Rectangle(0, 0, ripple1.width, ripple1.height);
   r2rect = new flash.geom.Rectangle(0, 0, ripple2.width, ripple2.height);
   r3rect = new flash.geom.Rectangle(0, 0, ripple3.width, ripple3.height);
   r1pt = new flash.geom.Point(0, 0);
   r2pt = new flash.geom.Point(0, ripple1.height);
   r3pt = new flash.geom.Point(0, ripple1.height + ripple2.height);
  }

  private function showWave(e:Event)
  {
   offset1.y = offset1.y + speed1;
   offset2.y = offset2.y + speed2;
   offset3.y = offset3.y + speed3;

   seed = 0;

   ripple3.perlinNoise(0, 12, 1, seed, true, true, 1, true, [offset3]);
   ripple2.perlinNoise(0, 8, 1, seed, true, true, 1, true, [offset2]);
   ripple1.perlinNoise(0, 4, 1, seed, true, true, 1, true, [offset1]);


   ripple.copyPixels(ripple1, r1rect, r1pt);
   ripple.copyPixels(ripple2, r2rect, r2pt);
   ripple.copyPixels(ripple3, r3rect, r3pt);
   ripple.merge(gradient, rect, pt, 127, 127, 127, 127);
   dMap = new flash.filters.DisplacementMapFilter(ripple, pt, 0, 1, 100, 100, DisplacementMapFilterMode.WRAP);
   this.filters = [dMap];
  };
 }
}

суббота, 3 октября 2009 г.

Парсинг JSON без библиотек в одну строку

json

Легкий и простой способ парсить JSON, без использования сторонних библиотек предложен Tyler Larson на cookbooks.adobe.com

public function decode( data:String ):void
{
   return ExternalInterface.call("function(){return " + data + "}");
}

суббота, 26 сентября 2009 г.

1151 A conflict exists with definition your_mc in namespace internal

Ошибка "1151: A conflict exists with definition your_mc in namespace internal" возникает в среде разработки Flash при программировании на actionscript 3, когда вы пытаетесь еще раз задекларировать уже существующие экземпляры.

Чтобы избавиться от нее нужно отключить автоматическую декларацию экземпляров в настройках публикации flash:

File -> Publish settings -> Flash -> Settings (возле "Script:" Actionscript 3.0) ->
убрать галочку с чекбокса "Automatically declare stage instances".

Только не забудьте определить ваш мувик your_mc в классе как public.

суббота, 18 июля 2009 г.

Использование useHandCursor в MovieClip на AS3

Чтобы использовать курсор на мувиках(MovieClip) в AS3 недостаточно прописать:

mc.useHandCursor = true;

надо еще включить "режим кнопки":

mc.buttonMode = true;
mc.useHandCursor = true;


Вот теперь все будет работать.

воскресенье, 28 июня 2009 г.

IE vs Flash (AS3)

Решил тут записывать о моментах возникающих в разработке на Flash (AS), себе для памяти, а может кому еще пригодится.

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

IE VS Flash

Итак был себе мирно код для прелоадера на AS3, никого не трогал:


loaderInfo.addEventListener(ProgressEvent.PROGRESS, loadingListener);
private function loadingListener (e:ProgressEvent):void
{
  if(e.bytesLoaded>=e.bytesTotal)
  {
    gotoAndStop(2);
  }
}



Но, оказывается, если Internet Explorer закэшировал флешку, то ProgressEvent не работает.
Поэтому, надо использовать старый добрый onEnterFrame:


root.addEventListener("enterFrame",onEnterFrame);
function onEnterFrame(e:Event)
{
  if(loaderInfo.bytesLoaded >= loaderInfo.bytesTotal)
  {
    gotoAndStop(2);
    root.removeEventListener("enterFrame",onEnterFrame);
  }
}



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


if (loaderInfo.bytesLoaded >= loaderInfo.bytesTotal)
{
  gotoAndStop(2);
}

Приятного кодинга!