Четверг, 07 Ноября 2024, 18:54

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [357]
Статьи об общих понятиях связанных с созданием игр.
Программирование [83]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [147]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [167]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [131]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Кто вы?
Всего ответов: 24697
Главная » Статьи » Программирование

Сравнительный тест производительности ActionScript3 vs ActionScript2 (Flash)
Доброго времени суток форумчане, возможно я плохо искал, но я не нашел сравнительных тестов производительности двух языков, а именно ActionScript3 и ActionScript2. А я точно знаю что они должны быть. Тем не менее навряд бы они меня удоволитворили, так как меня интересует в основном только одна функция, а именно нахождение столкновений точки и обьекта.
Хочется добавить в игру много юнитов которые взаимодействуют с окружающим миром, а фпс падает? Знакомо? И мы начинаем оптимизировать код или искать более продуктивную среду или язык программирования. Недавно и мое творчество ограничилось продуктивностью среды разработки. Я давно знал что AS2 старье, но все же за простоту и удобство я его любил - пиши где хочешь, переменных не объявляй и т.д. И вот я решился перейти на AS3 и меня заинтересовал вопрос, а на сколько увеличится производительность? - Проверим.

Для теста я сделал два файла в которых аналогичные элементы и код, только один на AS2 а второй на AS3. На сцене у нас находятся два мувика a1, a2 и компонент label с именем l1.

Скриншот сцены:

В первом файле (AS2) в руте пишем:

Code

i2 = 2;  
onEnterFrame=function(){;  
i2++;//uvelichibaem cikl  
for(i=0;i a1._x=Math.random()*550;  
a1._y=Math.random()*400;  
if(a2.hitTest(a1._x,a1._y,true)){;  
a2._x=Math.random()*550;  
a2._y=Math.random()*400;  
};  
}//i;  
chas1 = getTimer();  
l1.text="fps: "+Math.ceil(1000/(chas1 - chas2));//pokazivatm fps  
if(Math.ceil(1000/(chas1 - chas2))<20){//uslovie vihoda  
l1.text=i2;//vivodim resultat  
delete onEnterFrame;//udalyayem function  
};  
chas2 = chas1;  
};//end enterFrame  

Во втором файле (AS3) в руте пишем:

Code

addEventListener(Event.ENTER_FRAME,ololo);  
var i:int;  
var i2:Number=2;  
var konec:Boolean=false;  
var chas1:Number;  
var chislo:Number;  
var chas2:Number;

function ololo(e:Event):void {  
if(konec==false){  
i2++;//uvelichibaem cikl  
for(i=0;i a1.x=Math.random()*550;  
a1.y=Math.random()*400;  
if(a2.hitTestPoint(a1.x,a1.y,true)){  
a2.x=Math.random()*550;  
a2.y=Math.random()*400;  
}  
}//i;  
//fps;  
chas1=getTimer();  
chislo=Math.ceil(1000/(chas1 - chas2))  
l1.text=chislo.toString();//pokazivatm fps  
if(Math.ceil(1000/(chas1 - chas2))<20){//uslovie vihoda  
l1.text=i2.toString();//vivodim resultat  
konec=true;  
};  
chas2=chas1;  
//end fps  
}//konec  
}

Что мы делаем с помощью этого кода? -постепенно увеличиваем размер цикла, и когда фпс падает меньше 20 - выдаем размер цикла. И немного параметров из файла: размеры 550*400, фпс 120. Тестировалось на 9 флэш плеере. Результат выдается не сразу а через некоторое время, на as2 это где то 30 секунд, а на as3 около 10 минут. Если у вас более мощный компьютер, то вам придется ждать дольше или же менять код для для более быстрого увеличения цикла.

А теперь немного цифр, первый файл (AS2) выдает от 1800 до 2000, а второй (AS3) дает нам от 13000 до 18000. Частота процессора 1.6 поэтому у вас могут быть результаты другие, но соотношение результатов будут около одного к восьми. Что же мы получили? - actionScript3 быстрее actionScript2 в 8 раз. Конечно же я проверял только функцию которая интересует меня, если вы не согласны со статьей или считаете тесты (алгоритмы) не правильными - пишите в комментариях, критика это всегда дорога к прогрессу.

И чуть не забыл, файлы на которых проводились тесты (cs3):

Удачного дня.

Категория: Программирование | Добавил: apoptom (19 Апреля 2011) | Автор: Юрий
Просмотров: 4548 | Комментарии: 5 | Рейтинг: 3.0/4 |
Теги: ActionScript, AS3, Test, сравнительные тесты производительно, as2, тесты, Флэш, производительность, флеш, Flash
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Сравнительный тест производительности ActionScript3 vs ActionScript2 (Flash)», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 5
+1-
1 noTformaT   (19 Апреля 2011 21:53) [Материал]
noTformaTХа, интересно. Но вот только не понял, фпс расчитывается так - (количество миллисекунд на кадр / 1000), а у вас - (1000 / ....).
Результат выдается не сразу а через некоторое время, на as2 это где то 30 секунд, а на as3 около 10 минут.
выходит что ролик на ас2 работает в 20 раз быстрее. и тут же...
actionScript3 быстрее actionScript2 в 8 раз.
Чет я не понял sad
Для увеличения скорости используйте указание типов данных. (Ясень пень, что команда var x:Number = Math.Random()*100; выполнится быстрее чем x = Math.Random() * 100;).
столкновений точки и обьекта.
смотря как ищите. Самый простой способ через Боундс или через расстояние smile

+1-
2 apoptom   (19 Апреля 2011 23:44) [Материал]
И так по порядку, ас2 выдает раньше результат потому что у него падает фпс быстрее (<20). Фпс вычисляется правильно, скопировал из старого проекта поэтому не вникал что там и как - но то что он работает правильно - я уверен.

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

Расстояние для вычисления столкновений только для круглых объектов. Боундс не слышал, есть гетПиксель, но это другая история.


+1-
3 noTformaT   (20 Апреля 2011 00:34) [Материал]
noTformaTБоундс - это если короче, прямоугольная область, а если еще короче, это четыре стороны прямоугольника, которые проверяются на сталкновение. Насчет гетПиксел - вариант нескольки странный.
Но никак не могу понять смысл теста. Вернее что он тестирует smile Если тестирует столкновение, то есть же два типа определение столкновения - столкновение в текущем кадре, и столкновение в будущем кадре (вернее определение в каком кадру произойдет столкновение) smile

+1-
4 apoptom   (20 Апреля 2011 14:35) [Материал]
Возможно я неправильно выразился, столкновением назвал проверку - лежит ли точка на объекте.

+1-
5 noTformaT   (20 Апреля 2011 14:45) [Материал]
noTformaTНу это и есть столкновение (точка и фигура). Ну лучше использовать стандартный метод hitTest. Этот метод лежит в работе событий MouseEvent.MOUSE_DOWN, MouseEvent.MOUSE_UP и MouseEvent.MOUSE_MOVE и т.д (тоесть во всех событий мыши)

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • PointJS
  • Alice
  • Jolt3d!
  • Superpowers
  • Mosi
  • BasiEgaXorz
  • Away3D
  • Blitz3D
  • SpriteCraft
  • Supertuxkart
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг