Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.05.2008, 22:57
Sway вне форума Посмотреть профиль Отправить личное сообщение для Sway Найти все сообщения от Sway
  № 1  
Ответить с цитированием
Sway

Регистрация: Apr 2004
Адрес: Симферополь
Сообщений: 14
По умолчанию Timer не работает с интервалом менее 1000мс

Ситуация такая: Есть некоторое приложение на AS3 + AIR, выполняющее 2х и 3х-мерные преобразования объекта (для универа делаю).
Задача: Заставить объекты перемещаться плавно.
Проблема: таймер правильно работает только с delay ~1000 и выше. Но мне необходимо delay примерно 10.
Что происходит: delay = 10. объект перемещается рывками с периодом явно не 10мс.

вот код:
Код:
public function animate(args:Array)
{
	// сборка необходимых данных
	...
	// таймер
	timeOut = 10;
	this.animationArgs['stepCount'] = 20;
	this.timer = new Timer(timeOut,this.animationArgs['stepCount']);
	this.timer.addEventListener(TimerEvent.TIMER, this.applyAnimation);
	this.timer.start();
}

// применяет преобразования имитируя анимацию
private function applyAnimation(event:TimerEvent)
{
	// запуск трансформации
	if(this.animationArgs['stepVars'].length != 0)
	this.animationArgs["workSpace"].startTransform(this.animationArgs['stepVars'].shift());
}
this.animationArgs['stepVars'] - массив, состоящий из массивов с данными для преобразования на каждом шаге анимации

PS: если есть другой способ сделать таймер или задержку (типа JavaScript'ового sleep), прошу подсказать.


Последний раз редактировалось Sway; 17.05.2008 в 23:21.
Старый 17.05.2008, 23:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Sway, отредактируйте свой пост и оформите код тегами [code][/code].

Таймер не является точным инструментом, точность зависит от нагрузки на процессор, от fps и ряда других факторов.

Старый 17.05.2008, 23:20
Sway вне форума Посмотреть профиль Отправить личное сообщение для Sway Найти все сообщения от Sway
  № 3  
Ответить с цитированием
Sway

Регистрация: Apr 2004
Адрес: Симферополь
Сообщений: 14
странность в том, что раньше похожий код работал правильно. Хотя и нагрузки на комп было немного меньше... попробую обойти вычисления. Или вычислять до вызова таймера

Старый 17.05.2008, 23:25
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
10 мс — это сто кадров в секунду, с такой скоростью проигрывание бывает крайне редко.

Старый 17.05.2008, 23:34
Sway вне форума Посмотреть профиль Отправить личное сообщение для Sway Найти все сообщения от Sway
  № 5  
Ответить с цитированием
Sway

Регистрация: Apr 2004
Адрес: Симферополь
Сообщений: 14
я не увидел разницы ни при 10мс, ни при 100мс, ни при 500мс... Сейчас переделываю так, чтобы ничего не считалось, а сразу применялись новые координаты к точкам. Как сделаю, отпишусь.

Старый 17.05.2008, 23:38
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Значит у вас слишком маленький FPS установлен.

Старый 17.05.2008, 23:45
Sway вне форума Посмотреть профиль Отправить личное сообщение для Sway Найти все сообщения от Sway
  № 7  
Ответить с цитированием
Sway

Регистрация: Apr 2004
Адрес: Симферополь
Сообщений: 14
по умолчанию - 12fps установлено

Старый 17.05.2008, 23:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Соответственно, перерисовки чаще, чем 12 fps не будет.

Старый 17.05.2008, 23:58
Sway вне форума Посмотреть профиль Отправить личное сообщение для Sway Найти все сообщения от Sway
  № 9  
Ответить с цитированием
Sway

Регистрация: Apr 2004
Адрес: Симферополь
Сообщений: 14
моя задача сейчас добится хоть чего-то похожего на анимацию. и 12фпс для этого будет вполне достаточно.
Все, проблему решил! Анимация приемлемая получилась.
Решение:
- Выполнение всех вычислений до запуска анимации (таймера). Данные сохраняются в массив через array.push(data)
- При срабатывании таймаута данные извлекаются с помощью array.shift() и применяются к объектам на сцене.

Старый 18.05.2008, 00:01
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 10  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
event.updateAfterEvent();

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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