Статьи

Совет: как создать счетчик частоты кадров в ActionScript 3.0

В этом кратком совете вы узнаете, как измерить текущую частоту кадров вашего приложения Flash с помощью ActionScript 3, и отобразить FPS на экране.


Частота кадров, или число кадров в секунду (к / с), — это частота, с которой устройство формирования изображения создает уникальные последовательные изображения, называемые кадрами. Этот термин в равной степени применим к компьютерной графике, видеокамерам, пленочным камерам и системам захвата движения.

Каждый кадр является неподвижным изображением; Отображение кадров в быстрой последовательности создает иллюзию движения. Чем больше кадров в секунду (кадров в секунду), тем плавнее движение.

Измерение fps позволит вам проверить производительность вашего фильма или приложения и при необходимости выполнить оптимизацию.

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

С небольшой помощью из ActionScript 3 мы вычислим частоту кадров с помощью метода getTimer () и создадим TextField для отображения результатов в режиме реального времени в рабочей области.


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


Нажмите Option / Alt + F9 или перейдите в Window> Actions, чтобы открыть панель действий.


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

1
2
3
var startTime:Number;
var framesNumber:Number = 0;
var fps:TextField = new TextField();

Это основная функция нашего счетчика:

1
2
3
4
5
6
7
function fpsCounter():void
{
    startTime = getTimer();
    addChild(fps);
 
    addEventListener(Event.ENTER_FRAME, checkFPS);
}

Эта функция вычисляет частоту кадров на входном фрейме:

01
02
03
04
05
06
07
08
09
10
11
12
13
function checkFPS(e:Event):void
{
    var currentTime:Number = (getTimer() — startTime) / 1000;
 
    framesNumber++;
     
    if (currentTime > 1) //If the time in seconds is greater than 1
    {
        fps.text = «FPS: » + (Math.floor((framesNumber/currentTime)*10.0)/10.0);
        startTime = getTimer();
        framesNumber = 0;
    }
}

Используйте эту единственную строку кода для запуска основной функции:

1
fpsCounter();

Полный код должен выглядеть так:

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
27
var startTime:Number;
var framesNumber:Number = 0;
var fps:TextField = new TextField();
 
function fpsCounter():void
{
    startTime = getTimer();
    addChild(fps);
 
    addEventListener(Event.ENTER_FRAME, checkFPS);
}
 
function checkFPS(e:Event):void
{
    var currentTime:Number = (getTimer() — startTime) / 1000;
 
    framesNumber++;
     
    if (currentTime > 1)
    {
        fps.text = «FPS: » + (Math.floor((framesNumber/currentTime)*10.0)/10.0);
        startTime = getTimer();
        framesNumber = 0;
    }
}
 
fpsCounter();

Возможно, вы предпочитаете использовать класс документа, а не код временной шкалы? Следующий фрагмент демонстрирует, как это сделать. Прочтите этот краткий совет, если вы не уверены, как подойти к классу документа.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package
{
    import flash.display.MovieClip;
    import flash.text.TextField;
    import flash.events.Event;
    import flash.utils.getTimer;
     
    public class FPSDemo extends MovieClip
    {
        public var startTime:Number;
        public var framesNumber:Number = 0;
        public var fps:TextField = new TextField();
     
        public function FPSDemo()
        {
            fpsCounter();
        }
     
        public function fpsCounter():void
        {
            startTime = getTimer();
            addChild(fps);
 
            addEventListener(Event.ENTER_FRAME, checkFPS);
        }
 
        public function checkFPS(e:Event):void
        {
            var currentTime:Number = (getTimer() — startTime) / 1000;
 
            framesNumber++;
             
            if (currentTime > 1)
            {
                fps.text = «FPS: » + (Math.floor((framesNumber/currentTime)*10.0)/10.0);
                startTime = getTimer();
                framesNumber = 0;
            }
        }
    }
}

Вы можете использовать этот класс для встраивания счетчика FPS в любой проект, например так:

1
2
var fpsDemo:FPSDemo = new FPSDemo();
addChild( fpsDemo );

Просто скопируйте все это в новый файл AS и сохраните его как «FPSDemo.as», тогда вы сможете использовать его в любое время.

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

Спасибо за прочтение!