![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jan 2011
Сообщений: 70
|
Вот маюсь вопросом. Есть поле крестики-нолики. Каждая клетка extends Sprite. В каждой клетке может быть Спрайт крестика или нолика или нифигалика. Спрайты анимируются програмно (для этого есть метод Draw каждому спрайтику, и в нем я считаю сколько прошло секунд с момента последней отрисовки и рисую его в нужном мне виде)
Вопрос в том - как этот метод лучше (оптимальнее) вызывать. Есть решения. 1 addEventListener(Event.ENTER_FRAME, одна_большая_функция_с_циклом_по_всем_клеткам) 2 каждая_клетка.addEventListener(Event.ENTER_FRAME, функция_отрисовки_своего_содержимого) 3 ??? Нужно сразу реализовать метод, который не отвалится, если придется увеличивать количество клеток, и количество спрайтов в каждой клетке. (анимированый фон, или что-то еще) Таймерами, как я понимаю, в АС3 не принято пользоваться. Раскуриваю програмную анимацию вторые сутки. Не пиннать сильно! |
|
|||||
|
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
я бы делал один EnterFrame для всего поля
|
|
|||||
|
Я тоже за один EnterFrame для всего поля, иначе для каждой клетки будет создаваться свой Event, что отрицательно скажется на производительности.
__________________
http://www.chessmax.ru |
|
|||||
|
Banned
Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Достаточно было вбить в гугл. Этот вопрос относится вообще к разряду тривиальных.
Конечно нужно использовать один слушатель. |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 70
|
А как-то можно сделать чтобы событие не генерилось пока я его не обработаю? Флешка успешно "дохнет" где-то через минуту. Хотя там всего-то 200 клеточек и в одной из них стоит нолик с анимацией =/ Однака тормоза такие, что жуть. На всякий случай кусочки кода.
function animateAll(e:Event):void{ var i:uint; var j:uint; for ( i=0; i < Width; i++) { for ( j=0; j < Height; j++) { cells[i][j].doAnimation(); } } } public function doAnimation():void{ //-- цикл по всем объектам. for (var index:* in zObjects) { //-- это чо-та не работает, поэтому я тупо убрал не-анимационный мусор пока что для теста. //if (zObjects[index] is AnimatedObject){ zObjects[index].draw(); //} } } public function draw():void{ var lt:uint = getTimer(); var delta:uint = lt-lastUpdate; if(delta>timePerFrame){ var rest:uint=delta % timePerFrame; //--остаток от деления, мы его сохраняем. var framesPass:uint=(delta-rest)/timePerFrame; //-- сколько кадров надо было отрисовать за это время. lastUpdate = lt-rest;//--остаток, который не посчитали учитываем при подсчете в следующий раз. if (framesPass>0){ frame = frame+framesPass; while (frame>framesCount){ frame = frame-framesCount } var n:Graphics = this.graphics; // рисуем круг. n.beginFill(0x0000EE,1); n.lineStyle(1, 0x111111); n.drawCircle(0, 0, 5); //-- рисуем линию, которая "бегает" вниз. Вполне смотрибельно для теста. n.lineStyle(1, 0x00EEEE); n.moveTo(-5,frame-5) n.lineTo(5,frame-5); } } } Добавлено через 5 минут Цитата:
Забыл я про "%" в суете этой с анимацией...Добавлено через 20 минут Все пучком, забыл graphics очистить в анимации перед перерисовкой круга и линии. Прошу пардона. Спешим-с.... =/ Всем спасибо. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:51. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| ENTER_FRAME Анимация |
|
|