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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.06.2014, 14:28
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 1  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Question Бегущая строка (смещением х координаты текстового поля) дергается. Как исправить?

Есть код для бегущей строки (все примитивно, просто смещаем х-координату текстового поля под маской:
Код AS3:
private var runTimer:Timer;
runTimer = new Timer(60, 0);
runTimer.addEventListener(TimerEvent.TIMER, runTmrHandler);
private function runTmrHandler(e:TimerEvent)
		{
			if(item6.t0_txt.text != "")
			{
				if(item6.t0_txt.x > 5 - item6.t0_txt.width)
				{
					item6.t0_txt.x -= 6;
				}
				else
				{
					item6.t0_txt.x = 600;
				}
			}
			else
			{
				item6.t0_txt.x = 600;
			}
		}
При таком исполнении видно, что при движении текста он слегка подергивается и если его ускорять - дерганья становятся более явными. На текстовом поле поставил сглаживание для анимации.

Есть идеи, как можно решить такую проблему?
__________________
Игра "Пушкин"

Старый 18.06.2014, 14:55
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Есть идея. Можно двигать не по таймеру, а по ENTER_FRAME и двигать относительно дельты.
__________________
There is no thing in this world that is not simple.

Старый 18.06.2014, 15:12
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 3  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от SuriTheAngel Посмотреть сообщение
Есть идея. Можно двигать не по таймеру, а по ENTER_FRAME и двигать относительно дельты.
Увы, результат такой же.
__________________
Игра "Пушкин"

Старый 18.06.2014, 15:24
FlasherEgor вне форума Посмотреть профиль Отправить личное сообщение для FlasherEgor Найти все сообщения от FlasherEgor
  № 4  
Ответить с цитированием
FlasherEgor

Регистрация: Nov 2013
Сообщений: 86
Может быть, так: сам текст не добавлять в Display List, а вместо него добавлять какую-то Bitmap, в bitmapData которой методом draw() рисовать ваш текст?

Старый 18.06.2014, 15:26
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 5  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от FlasherEgor Посмотреть сообщение
Может быть, так: сам текст не добавлять в Display List, а вместо него добавлять какую-то Bitmap, в bitmapData которой методом draw() рисовать ваш текст?
Пробовал, но тоже плохо.
__________________
Игра "Пушкин"

Старый 18.06.2014, 16:06
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 6  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Цитата:
Увы, результат такой же.
Значит Вы не правильно сделали! Потому что это единственный рабочий способ.

Старый 18.06.2014, 16:08
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 7  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Таймер тут явно не нужен, SuriTheAngel очень прав. Ведь таймер у вас на 60 миллисекунд. И допустим флеш ролик у вас на 30 fps (33,3333.... мс). Рендер кадра происходит по ентерФрейм, каждые ~33 мс, а таймер обновляет позицию текста лишь каждые 60 мсек. Значит текстовое поле двигается примерно через кадр и то не стабильно.
Проверил у себя сделать с ентерФреймом, и текст двигается очень хорошо, плавно, даже без дельты.

Старый 18.06.2014, 16:57
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 8  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Таймер кроме того ещё и ведёт себя неадекватно. Например, тормозится при потере фокуса окна с флешкой или затормаживается на дополнительные миллисекунды вместе с торможениями системы.
__________________
There is no thing in this world that is not simple.

Старый 18.06.2014, 17:35
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 9  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
samana, таймер ведь синхронизируется с enterframe.

но все равно, событие enterframe - то, что максимально приблизит к вертикальной синхронизации(vsync).

если проблема именно в vsync, то ничего не поделать. в некоторых версиях плеера все нормально, в некоторых нет. вот например у меня сейчас 14,0,0,125 - есть лаги(дергания эти).
если пытаться решать проблему, то как минимум надо лезть в stage3d

Старый 18.06.2014, 18:30
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 10  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от nubideus Посмотреть сообщение
samana, таймер ведь синхронизируется с enterframe.
Но рендер кадра всё равно происходит только с частотой текущего fps. Лучше приведу наглядный пример, что я имею ввиду.
Код AS3:
var timer:Timer = new Timer(60);
timer.addEventListener(TimerEvent.TIMER, timer_timer);
timer.start();
 
addEventListener(Event.ENTER_FRAME, enterFrame);
 
private function timer_timer(e:TimerEvent):void 
{
	tf.x -= 6;
}
 
private function enterFrame(e:Event):void 
{
	trace("enterFrame, tf переместился на ", tf.x-tfX, " px");
	tfX = tf.x;
}
trace
Код AS3:
enterFrame, tf переместился на  -6  px
enterFrame, tf переместился на  0  px
enterFrame, tf переместился на  -6  px
enterFrame, tf переместился на  0  px
enterFrame, tf переместился на  0  px
enterFrame, tf переместился на  -6  px
enterFrame, tf переместился на  0  px
enterFrame, tf переместился на  -6  px
enterFrame, tf переместился на  -6  px
enterFrame, tf переместился на  0  px
enterFrame, tf переместился на  -6  px
enterFrame, tf переместился на  0  px
enterFrame, tf переместился на  -6  px
enterFrame, tf переместился на  0  px
Из этого видно, что за кадр, текстовое поле перемещается с непостоянной скоростью.


Последний раз редактировалось samana; 18.06.2014 в 18:41.
Создать новую тему Ответ Часовой пояс GMT +4, время: 21:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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