Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Анимация загружает ЦП. Какие предложения? (http://www.flasher.ru/forum/showthread.php?t=149549)

bav 27.01.2011 16:32

Что реже вызывается, то и меньше грузит. Это не очевидно?

shootkin 27.01.2011 17:05

Цитата:

Сообщение от Flashed_ (Сообщение 968327)
На счет того каким образом делать анимацию EnterFrame или Timer, что меньше нагружет?

Визуальную анимацию ВСЕГДА лучше делать на EnterFrame. Этот ивент, в общем-то, для этого и предназначается. Таймер же в этом случае - лишний объект с лишними диспатчами ненужных ивентов.
В твоем случае лучше сделать один глобальный обработчик EnterFrame для stage, например, и в нем в цикле двигать все объекты. Если тормозит, можно попробовать снизить фреймрейт, но лучше удостовериться, что все объекты совершенно примитивны, то есть на них нет своих анимаций, не навешаны никакие листенеры, не прописаны никакие скрипты, не изменяется альфа и что все они cacheAsBitmap.

Tails 27.01.2011 17:08

EnterFrame желательно использовать 1 на всех, а не каждому 1

КорДум 27.01.2011 17:12

Цитата:

Таймер же в этом случае - лишний объект с лишними диспатчами ненужных ивентов.
Неправда, как вы сделаете, если нужно что-то двигать толчками или наоборот - очень быстро, быстрее, чем fps? А как вы сделаете анимацию по времени?

Tails 27.01.2011 17:15

Цитата:

Сообщение от КорДум (Сообщение 968346)
... быстрее, чем fps?

Циклом.

Aquahawk 27.01.2011 17:17

КорДум А зачем делать анимацию быстрее фреймрейта? Отрисуется же всё равно по фреймам.

Tails 27.01.2011 17:19

Aquahawk
Скорее всего он имел ввиду смещение маленькими шагами на большие растояния. Не для анимация, а для определённых проверок. Например не пролетела ли пуля тоненькую стену.

alatar 27.01.2011 17:29

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

Единственный сомнительный смысл в нем, если он сможет выполниться несколько раз за фрейм. Но тут опять же:
а. придется вызывать updateAfterEvent, что форсирует и без того самую затратную операцию — рендеринг.

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

shootkin 27.01.2011 17:30

Цитата:

Сообщение от КорДум (Сообщение 968346)
А как вы сделаете анимацию по времени?

Как-то так:
Код AS3:

var curTime : int = GetTimer();
var delta : int = curTime - prevTime;
prevTime = curTime;
sprite.x += SPEED*delta;

Если же надо проверять коллизии, то очевидно надо проверять не только текущее положение объекта, но и его траекторию между кадрами.

alatar 27.01.2011 17:31

Цитата:

Скорее всего он имел ввиду смещение маленькими шагами на большие растояния.
Что мешает заранее просчитать не пролетит ли пуля через тоненькую стенку. Без таймеров, реального смещения и всяческих хиттестов.


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

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