|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Бегущая строка (смещением х координаты текстового поля) дергается. Как исправить?
Есть код для бегущей строки (все примитивно, просто смещаем х-координату текстового поля под маской:
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; } } Есть идеи, как можно решить такую проблему?
__________________
Игра "Пушкин" |
|
|||||
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Увы, результат такой же.
__________________
Игра "Пушкин" |
|
|||||
Регистрация: Nov 2013
Сообщений: 86
|
Может быть, так: сам текст не добавлять в Display List, а вместо него добавлять какую-то Bitmap, в bitmapData которой методом draw() рисовать ваш текст?
|
|
|||||
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Пробовал, но тоже плохо.
__________________
Игра "Пушкин" |
|
|||||
[+1 22.07.14]
[+4 12.08.14] [+1 09.02.15] Регистрация: May 2014
Сообщений: 182
|
Цитата:
|
|
|||||
Таймер тут явно не нужен, SuriTheAngel очень прав. Ведь таймер у вас на 60 миллисекунд. И допустим флеш ролик у вас на 30 fps (33,3333.... мс). Рендер кадра происходит по ентерФрейм, каждые ~33 мс, а таймер обновляет позицию текста лишь каждые 60 мсек. Значит текстовое поле двигается примерно через кадр и то не стабильно.
Проверил у себя сделать с ентерФреймом, и текст двигается очень хорошо, плавно, даже без дельты. |
|
|||||
Таймер кроме того ещё и ведёт себя неадекватно. Например, тормозится при потере фокуса окна с флешкой или затормаживается на дополнительные миллисекунды вместе с торможениями системы.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
samana, таймер ведь синхронизируется с enterframe.
но все равно, событие enterframe - то, что максимально приблизит к вертикальной синхронизации(vsync). если проблема именно в vsync, то ничего не поделать. в некоторых версиях плеера все нормально, в некоторых нет. вот например у меня сейчас 14,0,0,125 - есть лаги(дергания эти). если пытаться решать проблему, то как минимум надо лезть в stage3d |
|
|||||
Но рендер кадра всё равно происходит только с частотой текущего fps. Лучше приведу наглядный пример, что я имею ввиду.
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; } 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. |
|
« Предыдущая тема | Следующая тема » |
|
|