Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите с оптимизацией (3д салют) (http://www.flasher.ru/forum/showthread.php?t=174252)

nitratus 21.01.2012 04:32

Помогите с оптимизацией (3д салют)
 
Здравствуйте!
Я делаю 3д салют, а поскольку там много мелких обьектов, то много чего есть оптимизировать.

1) Стандартная функция мас.рандом долго работает(когда вызывается много раз). К примеру, если мне нужно случайное число 1, 2 или 3, то использовать рандом вообще нерационально...

2) Класс, который отвечает за искорку, я делал мувиком, но думаю что лучше сделать спрайтом. Тогда можно ли будет чтобы с ним что-то происходило каждый кадр(Event.ENTER_FRAME) - у спрайтов же нет таймлайна? (чувствую, этот вопрос самый тупой)

3) Функция f.sortOn("z", Array.NUMERIC) вроде тоже долго работает. Можно ли сортировать с точностью до целых??? (например, мне неважно если обьект с координатой 100.00002 будет ближе чем 100.00001, а флеш-то по этому поводу заморачивается :) )

4) На сколько API рисование работает быстрее, чем если накидать спрайтов и мувиков из библиотеки?

5) По поводу з-сортировки - лучше всего создать публичный массив, в него пушем кидать спрайты, мувики, классы, а потом сортОном делать з-сортировку каждый кадр?

Спасибо!!

silin 21.01.2012 18:54

попробую чем могу

1) не о чем вопрос
долго это сколько?, где конкретно Math.random стал вдруг узким местом?
ну и альтернативы все равно нет, любой самописный рандом будет медленнее нативного

2) если нет нужды в таймлайне, то естественно спрайт лучше (правда, на производительности это мало скажется)
Event.ENTER_FRAME это broadcast event, т.е. его получают все дисплейОбжекты, независимо от таймлайна или даже присутствия на сцене

3) с сортировкой у флеша не очень хорощо обстоит дело, а с сортировкой по какому-то полю (sortOn) в особенности
лучше (быстрее) всего сортируется как раз массив целых,
я бы его и сортировал, т.е.отдельный массив, в который складываются не объекты, а значения нужного параметра, сортируем с опцией Array.RETURNINDEXEDARRAY, полученный массив индексов используем для расстановки или чего еще
использовать ли встроенный sort или какой из самописных навскидку сказать нельзя, все по месту надо тестировать-проверять, гугл легко даст массу вариантов, тема актуальная
и еще такой момент: сортировка может оказать и не самым узким местом, например, в сравнении с тормозами от отрисовки графики, т.е. может быть и сильно заморачиваться нет смысла, но опять же проверять-смотреть надо по месту

4)имхо, не имеет значения, поскольку тормоза в основном при отрисовке плеером графики, а не при ее создании, другими словами неважно откуда графика из библиотеки или созданная программно, если она "тяжелая", то тормозить будет одинаково

5) нет однозначных советов,
но тема популярная, поройся хоть бы и на флешере

nitratus 21.01.2012 22:30

Еще раз спасибо, вроде все ясно)
Но по поводу раднома: если у меня 1000 частиц, у каждой по 5 параметров, и каждый кадр параметр задается рандомно, то явно медленнее все работает. Если отключить random, то работает быстрее.

ПС ой, а как же достучаться до массива с мувиками из какого-то класса? Массив называется a, я к нему обращался и root.a, и stage.a, ничего не выходит.

silin 21.01.2012 23:08

>> Если отключить random, то работает быстрее.
это фактический факт, не поспоришь :)
только есть подозрение, что собственно Math.random здесь не особо при чем, в том смысле, что затраты на него скорее всего несопоставимо меньше, чем на изменение параметров и рендеринг этих изменений
т.е. вопрос, чаще всего, не в том менять ли по рандому или по кругу, а в том что, у кого и как часто менять

nitratus 22.01.2012 04:23

>>только есть подозрение, что собственно Math.random здесь не особо при чем

Я делал 3д фонтан из кружочков, когда кружок падает, то он переносится в исходную точку и ему присваиваются новые скорости небольшой разброс по координатам.
Так вот, я пытался управлять формой фонтана, задавая начальные положения частиц, скорости; во время полета рендомный дрейф им делал; эти рендомы перемножал, мешал с синусами и т.д.

Графика от этого не изменилась, но степень подтормаживания заметно зависела от количества рендомов.
(а когда всем частицам одновременно задаются начальные параметры(первый кадр), то вообще заметно тормозит, если всем одинаковые параметры дать (почти) то в первом кадре не подвисало, так что рендом тоже грузит)

Частиц было где-то 1500.

ChuwY 23.01.2012 02:10

Может, попробовать воспользоваться твинерами?

nitratus 23.01.2012 02:35

а что за твинеры?

ChuwY 23.01.2012 14:33

http://www.greensock.com/tweening-speed-test/

nitratus 23.01.2012 17:05

Демки на сайте выглядят внушающе)


Часовой пояс GMT +4, время: 10:39.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.