Статьи

Блог Action Day: создание виртуальной ветровой электростанции в ActionScript 3

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

В этом руководстве вы узнаете, как создать виртуальную ветряную ферму с помощью ActionScript 3.0.




Этот пост является частью Blog Action Day 2009 , всемирной инициативы, созданной основателями Envato Коллисом и Сайаном Таидом, которой в настоящее время управляет Change.org . Блог Action Day существует для того, чтобы перевести разговор в Интернете на один день , объединив тысячи блогеров вокруг одной важной проблемы — в этом году — Изменение климата. Еще не поздно зарегистрировать свой блог и принять участие.

Мы собираемся получить возвращенное значение свойства activityLevel класса Microphone, а затем передать его свойству вращения ранее созданного Turbine MovieClip.

Это приведет к тому, что наши ветряные турбины будут вращаться относительно уровня звука, воспринимаемого микрофоном. Пользователи буквально смогут дуть на свои экраны и наблюдать за вращением турбины!

Откройте Flash и создайте новый файл Flash (ActionScript 3).

Установите размер сцены 600×300 и частоту кадров 24 кадра в секунду.

«»

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

Выберите Rectangle Tool (R) и создайте синий прямоугольный градиент (# 81CCFE, # D0EAFB) прямоугольника размера сцены.

Используйте Gradient Transform Tool (F), чтобы вращать градиент, оставляя ваш фон таким:

Это будет наше небо.

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

Снова выберите инструмент «Прямоугольник» и создайте прямоугольник зеленого линейного градиента размером 600×30 пикселей (# 9AB937, # AFC232, # 9AB937) и выровняйте его по нижней части сцены.

Используйте инструмент «Выделение» (V), чтобы взять верхний край прямоугольника (вы заметите, что курсор меняется на стрелку с небольшой кривой внизу), и перетащите его, чтобы сделать небольшую кривую влево; посмотрите на следующее изображение для справки.

Используйте инструмент «Прямоугольник», чтобы нарисовать прямоугольник # F7F7F7, 10×153 px, и используйте инструмент «Выделение», чтобы перетащить верхние края, делая его тоньше. Это будет основание турбины.

Чтобы создать лезвия, нарисуйте прямоугольник размером 1×90 пикселей, затем используйте инструмент «Выделение», чтобы перетащить стороны и создать полуовал. Вы можете увидеть это лучше на следующем изображении.

Дублируйте лезвие (Cmd + D) и используйте Transform Tool, чтобы вращать его. Повторите этот шаг, чтобы сделать в общей сложности 3 лезвия.

Выберите инструмент Oval Tool, создайте круг размером 20×20 пикселей и поместите его в центр турбин.

Добавьте немного тени, продублировав ветротурбину и изменив ее цвет на # D0D0D0. Затем перейдите к Modify> Arrange> Send backward и переместите выделение на 1 пиксель вправо.

Преобразуйте лезвия в мувиклип и установите его имя экземпляра как «турбина». Снова используйте меню Arrange, чтобы вывести средний круг вперед.

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

Мы собираемся добавить некоторую информацию о ветровых турбинах, а также название дня действий в блоге.

Выберите Text Tool (T) и создайте новый статический TextField. Добавьте заголовок и информацию и используйте следующий фильтр.

ОК, графическая часть закончена. Это должно выглядеть так:

Создайте новый файл ActionScript (Cmd + N) и сохраните его как «Main.as».

Это будет класс, который будет обрабатывать приложение.

Это те классы, которые нам понадобятся. Подробное описание каждого класса см. В справке по Flash (F1).

01
02
03
04
05
06
07
08
09
10
package
{
    import flash.display.Sprite;
    import flash.media.Microphone;
    import fl.transitions.Tween;
    import fl.transitions.easing.Strong;
    import fl.transitions.TweenEvent;
    import flash.events.Event;
    import flash.events.ActivityEvent;
    import flash.system.Security;

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

1
2
public class WindFarm extends Sprite
{

Мы будем использовать только три переменные в этом классе, две объявлены в следующем блоке кода и еще одну для Tween, объявленного в функции вращения.

1
2
private var started:Boolean;
private var mic:Microphone = Microphone.getMicrophone();

Конструктор — это функция, которая запускается, когда объект создается из класса. Этот код выполняется первым, когда вы создаете экземпляр объекта или запускаете с использованием класса документа.

01
02
03
04
05
06
07
08
09
10
11
public function WindFarm():void
{
    Security.showSettings(«2»);
    mic.setLoopBack(true);
 
    if (mic != null) //If the mic was enabled…
    {
        mic.setUseEchoSuppression(true);
        mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler);//Calls the activityHandler function every time the microphone detects sound
    }
}

Этот код добавляет слушателя для выполнения функции вращения, которая будет обрабатывать движение турбин.

1
2
3
4
private function activityHandler(event:ActivityEvent):void
{
    stage.addEventListener(Event.ENTER_FRAME, rotateTurbines);
}

Эта функция управляет вращением турбин.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private function rotateTurbines(e:Event):void
{
    /* If the activity level received by the microphone is between 11 and 19, and the turbines are already spinning,
       a «slow down» tween is executed*/
 
    if (mic.activityLevel < 20 && mic.activityLevel > 10 && started)
    {
        var tween;
                 
        tween = new Tween(turbine,»rotation»,Strong.easeOut,turbine.rotation,turbine.rotation + 720,3,true);
        tween = new Tween(turbine2,»rotation»,Strong.easeOut,turbine.rotation,turbine.rotation + 720,3,true);
        tween = new Tween(turbine3,»rotation»,Strong.easeOut,turbine.rotation,turbine.rotation + 720,3,true);
        tween = new Tween(turbine4,»rotation»,Strong.easeOut,turbine.rotation,turbine.rotation + 720,3,true);
                 
        tween.addEventListener(TweenEvent.MOTION_FINISH, onMotionFinish);//Calls a function when the turbines stop
    }
    else if (mic.activityLevel > 20)// If the activity level is higher than 20, the sound is enough to move the turbines
    {
        started = true;
 
        turbine.rotation += mic.activityLevel;
        turbine2.rotation += mic.activityLevel;
        turbine3.rotation += mic.activityLevel;
        turbine4.rotation += mic.activityLevel;
    }
}

Этот код выполняется, когда анимация замедления завершена.

1
2
3
4
private function onMotionFinish(e:TweenEvent):void
{
    started = false;//Turbines are not moving
}

Вернитесь к файлу .Fla и в панели свойств добавьте «Main» в поле Class, чтобы сделать этот класс документа.

Теперь вы знаете, как получить, измерить и реализовать активность микрофона, плюс вы немного узнали о ветровых электростанциях и о том, как они помогают сохранить планету.

Будьте зеленым и спасибо за чтение!