Статьи

Создайте блестящие бинарные часы со вспышкой

В этом уроке мы собираемся создать необычные, но очень классные часы: бинарные часы.


Давайте посмотрим на конечный результат, к которому мы будем стремиться:


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

В нашей десятичной системе мы назначаем 10 для представления общего количества пальцев, которые у каждого из нас есть, и отсчитываем оттуда вверх и вниз. Но в двоичном коде 10 представляет собой просто общее количество больших пальцев — поэтому 10 в двоичном коде равно 2 в десятичном виде; 11 в двоичном коде — 3 в десятичном; 100 в двоичном — 4 в десятичном, и так далее. Таким образом, вместо каждого столбца, представляющего единицы, десятки, сотни, тысячи … (считая справа налево), они представляют единицы, двойки, четверки, восьмерки …, удваивающиеся каждый раз.

Таким образом, число 10, которое мы обычно видим, может быть представлено различными способами:

Бинарная система основана на числе два, поэтому она называется бинарной, в отличие от десятичной системы, которую мы обычно используем и которая имеет базу 10. Бинарная система — это система, используемая компьютерами для работы, потому что мы можем использовать его для представления любого числа, используя серию переключателей «вкл» (1) и «выкл» (0).

Обладая этими знаниями, вы можете понять, как читать часы в SWF?

Если вы хотите узнать больше об этом, вы можете использовать двоичную систему счисления Google и проверить информацию об этом =)


Создайте новый файл AS3 Flash и назовите его «Binary_Clock.fla».


Перейдите в свойства и измените размер на 550×400 и цвет фона на # 222222.


Перейдите на веб-страницу проекта TweenMax и загрузите библиотеку для AS3.


Разархивируйте файл и скопируйте папку с именем «com» ​​в папку, где находится ваш файл Binary_Clock.fla .


Теперь перейдите в меню «Вставка»> «Новый символ» и назовите его «Бит» с типом Movie Clip.

Этот «бит» будет представлять одну цифру числа и будет иметь два состояния в двух разных цветах: одно будет представлять 0, а другое — 1.


Затем в только что созданном символе создайте новый квадрат размером 50×50 пикселей.


Измените цвет квадрата на # 00CBFF и отцентрируйте его.


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


Если вы хотите, вы можете добавить текстовые метки и строки, чтобы сделать его более понятным:


Для каждого бита измените имя экземпляра на его панели свойств. Дайте им имена, как показано на рисунке ниже:


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

(Не уверен, что мы здесь делаем? Прочтите это краткое введение в классы документов .)


После завершения этапа мы можем начать кодирование. Сначала создайте новый файл ActionScript 3.0 и сохраните его как «Main.as».

Добавьте этот код в файл:

01
02
03
04
05
06
07
08
09
10
11
package{
    import flash.display.MovieClip;
 
    public class Main extends MovieClip
    {
        public function Main()
        {
 
        }
    }
}

Начнем с импорта необходимых классов. Добавьте это ниже декларации пакета:

1
2
3
4
5
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
import com.greensock.*;
import com.greensock.easing.*;

Далее мы объявим некоторые публичные переменные. Добавьте это ниже объявления класса:

1
2
3
4
5
6
public var clock:Timer=new Timer(1000);
public var date:Date=new Date();
public var hr:int;
public var min:int;
public var sec:int;
public var bits:Array;

Создание нового объекта Date автоматически устанавливает его на текущее время.


Хорошо, теперь давайте добавим код, который будет запускать часы. Это идет внутри функции Main ():

1
2
3
4
5
6
//With this we assign the actual values for the clock to each variable
sec=date.getSeconds();
min=date.getMinutes();
hr=date.getHours();
clock.start();
clock.addEventListener(TimerEvent.TIMER, setTime);

Это функция, которая будет вызываться каждую секунду.

1
2
3
4
5
6
7
private function setTime(e:TimerEvent):void
{
    date=new Date();
    sec=date.getSeconds();
    min=date.getMinutes();
    hr=date.getHours();
}

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

01
02
03
04
05
06
07
08
09
10
11
12
private function dec2bin(dec:int, length:int):Array
{
    var bin:Array = new Array();
    while((dec/2)>0) //note this has the same effect as «while((dec/2)>=1)»
    {
        bin.push(dec%2);
                            //in other words, dec%2 is 1 if dec is odd and 0 if dec is even.
        dec=dec/2;
    }
    while(bin.length<length) bin.push(0);
    return bin;
}

Итак, dec2bin (13, 4) дает [1,1,0,1].


Эта функция принимает десятичное число и использует dec2bin () для преобразования его в массив из 2 столбцов, который мы имеем на дисплее.

01
02
03
04
05
06
07
08
09
10
11
private function converter(num:int):Array
{
    var st:String=String(num);
    if (st.length==1) st=’0’+st;
    var fDigit:int=int(st.charAt(1));
    var sDigit:int=int(st.charAt(0));
    var fColumn:Array=dec2bin(fDigit,4);
    var sColumn:Array=dec2bin(sDigit,3);
    var result:Array=fColumn.concat(sColumn);
    return result;
}

Теперь нам нужно добавить что-то, что будет включать и выключать биты; вот что делает эта функция:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
//newBits is the 2-column array we get from converter(), target is «H» «M» or «S» to indicate which column to use
private function turnBits(newBits:Array, target:String):void
{
    //Loops through the 2-column array to change the state of the bit
    for(var a:int=0; a<newBits.length; a++)
    {
       //This checks if you are now trying to access element 6 of the hour columns;
        if((a!=6)||(target!=»H»))
        {
            //if it is 0, get the instance named for example «S0» which will be the first bit then «S1» and so on
            if(newBits[a]==0) this.getChildByName(target+String(a)).alpha=.2;
            //it it is 1, change the alpha to 1 (Turn it on)
            else this.getChildByName(target+String(a)).alpha=1;
        }
    }
}

Пара модификаций функций Main () и setTime (): нам просто нужно вызвать функцию, чтобы изменения вносились каждую секунду и в начале:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
public function Main()
{
    sec=date.getSeconds();
    min=date.getMinutes();
    hr=date.getHours();
    turnBits(converter(sec),’S’);
    turnBits(converter(min),’M’);
    turnBits(converter(hr),’H’);
    clock.start();
    clock.addEventListener(TimerEvent.TIMER, setTime);
}
 
private function setTime(e:TimerEvent):void
{
    date=new Date();
    sec=date.getSeconds();
    min=date.getMinutes();
    hr=date.getHours();
    turnBits(converter(sec),’S’);
    turnBits(converter(min),’M’);
    turnBits(converter(hr),’H’);
}

Попробуйте, и вы увидите, как правильно отображается время. Но мы можем сделать лучше …

Вот где приходит TweenMax. Мы добавим свечение и легкость, чтобы лучше смотреть на часы. Измените свою функцию turnBits () следующим образом:

01
02
03
04
05
06
07
08
09
10
11
private function turnBits(newBits:Array, target:String):void
{
    for(var a:int=0;a<newBits.length;a++)
    {
        if((a!=6)||(target!=»H»))
        {
            if(newBits[a]==0) TweenMax.to(this.getChildByName(target+String(a)), 1, {glowFilter:{color:0x00cbff, alpha:0, blurX:15, blurY:15,strength:1},alpha:.1});
            else TweenMax.to(this.getChildByName(target+String(a)), 1, {glowFilter:{color:0x00cbff, alpha:1, blurX:20, blurY:20,strength:.8},alpha:1});
        }
    }
}

Вот и все! Мы закончили наш урок =)

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

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